1

関連を介して has_many を使用したネストされたフォームに関するほとんどすべての質問をここで読みましたが、モデルを機能させることができません。誰か助けてくれませんか?

アーキタイプとスカートの好みの 2 つのモデルがあり、スカートの好みモデルを介してリンクされています。

モデルは次のとおりです。

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

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

引用符

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

所属先 :archetype 所属先 :SkirtPreferences
accept_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| %> ... <%= 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 の間の多対多の関係であると推測していますが、SkirtPreference は 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 **

SkirtPreferencesskirtpreferencesクラス名以外に変更する必要があります。

f.fields_for :skirtpreferencing doに変更してみてはいかがですかf.fields_for :skirtpreferencings do

于 2013-02-15T21:17:10.323 に答える