嵌套复选框的嵌套属性预定义字段

问题描述 投票:1回答:1

我有一个模型Food,其中有许多food_varientsFoodVarient是将由系统管理员设置的模型。 例如食物变体可以是热,辣,额外的奶酪等],等等。食物可以具有这些变体。

因为,Food

has_many food_varients,我决定使用嵌套形式允许管理员创建一个新的food item,还选择食物可能来自的food_varients由管理员预先创建的预定义food_varients

这是我的FoodsController外观:

class FoodsController < DashboardBaseController

  # GET /foods/new
  def new
    @food = current_department.foods.new
    @food.food_varients.build
  end

  # GET /foods/1/edit
  def edit
  end

  def food_params
    params.require(:food).permit(:name, :description,food_varients_attributes[:id,:varient_id])
  end

end

我还接受了Food.rb文件中的嵌套属性,如下所示:

class Food < ApplicationRecord
 has_many :food_varients, dependent: :destroy
 has_many :varients, through: :food_varients, dependent: :destroy

 accepts_nested_attributes_for :food_varients, reject_if: proc { |attributes| attributes['varient_id'] == "0" }

这就是我的表单的样子,添加食物:

= form_for @food do |f|
  .field.form-group
    = f.label :name
    = f.text_field :name, class: 'form-control', tabindex: 1
  .field.form-group
    = f.label :description
    = f.text_area :description, class: 'form-control', tabindex: 3
   ........

//**Nested Form Starts from here**
    - current_department.varients.each do |varient|
      = f.fields_for :food_varients do |g|
        = g.label :varient_id, varient.title
        = g.check_box :varient_id,{} ,varient.id

我创建了嵌套表单,方法是循环创建由管理员创建的Varient

模型的每个实例,并在创建新食品项目时为管理员提供添加food_varients的选项。 。

问题:

创建工作正常,并且按预期方式保存了嵌套属性。但是,当我尝试编辑food item

时,嵌套表单显示重复的字段。例如:如果最初将食物设置为具有变种(甜和酸)。现在,该食品的编辑页面向我显示了四个字段,而不是两个字段,其中两个选中的糖醋字段和两个未选中的字段。糖醋田。

我必须尝试其他方法吗?因为我看到的其他示例都使用text_fields

来动态保存嵌套属性,而我正在遍历已经存在的varient实例。

我有一个模型Food,其中包含许多food_varients。 FoodVarient是将由系统管理员设置的模型。例如,食物种类可以是热的,辣的,特制的奶酪等。食物...

ruby-on-rails nested-forms nested-attributes
1个回答
1
投票

这里完全不需要使用嵌套属性。只需将收集助手与varient_ids=设置器一起使用:

© www.soinside.com 2019 - 2024. All rights reserved.