已经坚持了一段时间,所以我想我会把它扔出去。
我有两个模型和一个连接模型:
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 partial只渲染一次,而构建器对象似乎正在查看原始的@theme对象。我的方法在这里有明显的错误吗?我正在尝试做什么?
另外,我正在运行rails 4,所以我没有使用accepts_nested_attributes_for,我设置了强大的参数。我不相信这会影响我的具体问题,而只是把它扔出去。
谢谢!
答案 0 :(得分: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