连接两个模型belongs_to / has_many并通过下拉列表选择

时间:2015-05-23 11:57:41

标签: ruby-on-rails key models rails-models

我是初学者,我面临一个基本问题。我找到了几个解决方案,但没有一个完全描述我的问题。 我有两个模型:联系人和小组

Group has_many :contacts
Contact belongs_to :group

(通过设计有第三个用户模型)

创建新联系人时,我希望用户可以通过选择选项(如下拉字段)选择此联系人所属的群组。

我在联系人表格中添加了:group_id索引:

class AddGroupIdToContacts < ActiveRecord::Migration
  def change
    add_column :contacts, :group_id, :integer
  end
end

在视图/ contacts / _form中,我使用了collection_select选项输出显示可用组的下拉字段:

<%= form_for(@contact) do |f| %>
  <% if @contact.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@contact.errors.count, "error") %> prohibited this contact from being saved:</h2>

      <ul>
      <% @contact.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  ...

  <div class="field">
    <%= f.label :group_id %><br>
    <%= f.collection_select(:group_id, Group.all, :id, :name) %>
  </div>

  ...

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我可以成功输入新的联系人,但在登录控制台时我有一个空的group_id:nil字段。

将所选组的ID输入到group_id字段的正确方法是什么?如何在show.html.erb中显示此条目(最好使用组ID的名称)?

我知道这是一个基本的问题,但我坚持并且对rails很新。谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

<%= f.select :group_id, options_from_collection_for_select(Group.all, , 'id', 'name') %>

这会对你有帮助。

答案 1 :(得分:0)

我尝试了上面的代码,它的工作正常。我可以保存与group_id的联系,而无需更改代码。请再检查一次。你在控制器的params中得到group_id吗?