3

しばらくこれに固執していたので、そこに捨てることにしました。

2 つのモデルと結合モデルがあります。

class Container < ActiveRecord::Base
  has_many :theme_containers
  has_many :themes, :through => :theme_containers
end

class Theme < ActiveRecord::Base
  has_many :theme_containers
  has_many :containers, :through => :theme_containers
end

class ThemeContainer < ActiveRecord::Base
  belongs_to :container
  belongs_to :theme
end

グランド。コンソールで Theme.first.containers と Theme.first.theme_containers を入力すると、期待どおりのモデルが得られるため、この関連付けが機能していることがわかります (当面は theme_container インスタンスを手動で作成しました)。

問題は、テーマのフォームで、結合データ (theme_containers) の属性を更新できるようにしたいことです。

これが私のフォームの簡略版です。

<%= form_for(@theme) do |f| %>
  <%= f.fields_for :theme_containers do |builder| %>
    <%= render 'theme_container_fields', f: builder %>
  <% end %>
<% end %>

これを実行すると、container_fields パーシャルは 1 回だけレンダリングされ、ビルダー オブジェクトは元の @theme オブジェクトを見ているようです。ここで私のアプローチに明らかに明らかに間違っていることがありますか? 私がやろうとしていることは可能ですか?

また、Rails 4 を実行しているため、accepts_nested_attributes_for を使用しておらず、強力なパラメーターを設定しています。それが私の特定の問題に影響を与えるべきだとは思いませんが、それも捨ててしまいます。

ありがとう!

4

1 に答える 1

1

私がすることは次のとおりです。

class Theme < ActiveRecord::Base
  has_many :theme_containers
  has_many :containers, :through => :theme_containers

  accepts_nested_attributes_for :theme_containers
end

そしてあなたのThemeControllerで:

def new
  @theme = Theme.new
  Container.all.each do |container|
    @theme.theme_container.build(container_id: container.id)
  end
end
于 2015-02-19T12:28:09.117 に答える