1

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

有 2 个模型:原型和裙子偏好,通过裙子偏好模型链接。

以下是模型:

class Archetype < ActiveRecord::Base attr_accessible :occasion, :skirt_partworth, :title, :skirtpreferencings_attributes

has_many :skirtpreferences has_many :SkirtPreferences, :through => :skirtpreferences accept_nested_attributes_for :SkirtPreferences accept_nested_attributes_for :skirtpreferences end

块引用

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

belongs_to :archetype belongs_to :SkirtPreferences 接受_nested_attributes_for
:SkirtPreferences

结尾

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

has_many :skirtpreferences has_many :archetypes, :through => :skirtpreferences

结尾

表单看起来像这样,并且显示得很好:

<%= form_for(@archetype) 做 |f| %> ... <%= f.fields_for :skirtpreferencing do |preference_builder| %> <%= preference_builder.fields_for :SkirtPreferences do |builder| %> <%= 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
4

1 回答 1

1

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

尝试从 更改skirtpreferencing_attributesskirtpreferences_attributes。这是我的预感。因为您正在尝试将数据添加到 skritpreferences,而不是仅用于在skirtpreferences 和原型之间关联的skirtpreferences。

我也觉得这很不寻常。

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 dof.fields_for :skirtpreferencings do

于 2013-02-15T21:17:10.323 回答