我已经通过关联阅读了几乎所有有关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
答案 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