0

如果我有这种关系,

class Article < ActiveRecord::Base
  has_and_belongs_to_many :topics
end

class Topics < ActiveRecord::Base
  has_and_belongs_to_many :articles
end

我已经在主题下的表格中存储了一个预定义的主题列表。每篇文章必须有 3 个与之关联的主题。如果我创建一篇新文章,代码从控制器视图看起来如何?创建这个的最有效和正确的方法是什么?

4

1 回答 1

2

在表单中添加三个微调器字段,并使用主题 id 作为数据和主题名称作为标签填充它们。幸运的是,有表单助手可以为您完成大部分繁重的工作。有关的详细信息,请参见此处collection_select。这是从该链接中获取的示例:

<%= 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
于 2012-09-09T03:18:13.297 回答