使用带有has_many的嵌套表单 - 无法指定质量属性

时间:2013-02-15 20:43:38

标签: ruby-on-rails ruby nested-forms has-many-through

我已经通过关联阅读了几乎所有有关has_many嵌套表单的问题,但是我无法让我的模型起作用。有人可以帮忙吗?

有两种型号:原型和裙边装饰,通过裙边配置模型连接。

以下是模型:

  

class Archetype< ActiveRecord :: Base attr_accessible:场合,   :skirt_partworth,:title,:skirtpreferencings_attributes

     

has_many:skirtpreferencings has_many:SkirtPreferences,:through   => :skirtpreferencings accepts_nested_attributes_for:SkirtPreferences accepts_nested_attributes_for:skirtpreferencings   端

     

块引用

     

class Skirtpreferencing< ActiveRecord :: Base attr_accessible   :archetype_id,:skirt_preference_id,:skirtpreferencing_attributes

     

belongs_to:archetype belongs_to:SkirtPreferences
  accepts_nested_attributes_for:SkirtPreferences

     

     

class SkirtPreference< ActiveRecord :: Base attr_accessible   :archetype_id,....

     

has_many:skirtpreferencings has_many:archetypes,:through =>   :skirtpreferencings

     

表单看起来像这样,显示正常:

  

<%= form_for(@archetype)do | f | %GT; ...       <%= f.fields_for:skirtpreferencing do | preference_builder | %GT;         <%= preference_builder.fields_for:SkirtPreferences do | builder | %GT;       <%= render“skirt_preferences_field”,:f => builder%>       <%end%> <%end%> ...

我想我会在控制器中做点什么,但我不确定到底是什么。

谢谢!

添加控制器:

class ArchetypesController < ApplicationController

 def new
 @archetype = Archetype.new
 @archetype.skirtpreferencings.build
end

    # GET /archetypes/1/edit
def edit
  @archetype = Archetype.find(params[:id])
end

 def create
 @archetype = Archetype.new(params[:archetype])     
end 


class SkirtPreferencesController < ApplicationController   

 def new
 @skirt_preference = SkirtPreference.new
 end 

 def edit
 @skirt_preference = SkirtPreference.find(params[:id])
 end


 def create
 @skirt_preference = SkirtPreference.new(params[:skirt_preference])

 end

1 个答案:

答案 0 :(得分:1)

我猜这是SkirtPreference和Archetype之间的多对多关系,而SkirtPreferencing是SkirtPreference和Archetype之间的关联?

尝试从skirtpreferencing_attributes更改为skirtpreferences_attributes。那是我的预感。因为你试图将数据添加到skritpreferences,而不是裙子首选项和裙子之间的关联。

我也认为这很不寻常。

has_many :SkirtPreference, :through => :skirtpreferencings

accepts_nested_attributes_for :SkirtPreference

...

belongs_to :SkirtPreference

accepts_nested_attributes_for :SkirtPreference

所有这些通常应该是:skirtpreferences


**编辑1 **

假设表格是在ArchetypesController的新操作中生成的......

您似乎缺少从原型构建一个裙子首选属性的部分。

所以你在ArchetypesController中的新动作

def new
  @archetype = Archetype.new
  @archetype.skirtpreferencings.build
  ...
end

**编辑2 **

除了班级名称外,

SkirtPreferences应更改为skirtpreferences

您可以尝试将f.fields_for :skirtpreferencing do更改为f.fields_for :skirtpreferencings do