如果我有这种关系,
class Article < ActiveRecord::Base
has_and_belongs_to_many :topics
end
class Topics < ActiveRecord::Base
has_and_belongs_to_many :articles
end
我已经在主题下的表格中存储了预定义的主题列表。每篇文章必须有3个主题与之相关联。如果我创建一篇新文章,代码将如何从控制器和视图看起来?什么是最有效和最正确的创建方式?
答案 0 :(得分:2)
向表单添加三个微调器字段,并使用主题id作为数据和主题名称作为标签填充它们。幸运的是,有一些表格助手可以为您完成大部分繁重的工作。有关collection_select
的详细信息,请See here。以下是从该链接中获取的示例:
<%= collection_select(:person, :city_id, City.all, :id, :name) %>
在控制器中,您可以根据所选的ID创建必要的关联。看起来应该是这样的:
_form.html.erb
<% form_for @article do |f| %>
...
<%= collection_select(:article, :topic_id_1, Topic.all, :id, :name) %>
<%= collection_select(:article, :topic_id_2, Topic.all, :id, :name) %>
<%= collection_select(:article, :topic_id_3, Topic.all, :id, :name) %>
...
<% end %>
acticle_controller.rb
def create
...
@article.topics << Topic.find params[:topic_id_1]
@article.topics << Topic.find params[:topic_id_2]
@article.topics << Topic.find params[:topic_id_3]
...
end