【问题标题】:Connecting two models belongs_to/has_many and selecting via dropdown in form连接两个模型 belongs_to/has_many 并通过表单中的下拉菜单进行选择
【发布时间】:2015-05-23 11:57:41
【问题描述】:

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

Group has_many :contacts
Contact belongs_to :group

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

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

我在他的联系人表中添加了一个 :group_id 索引:

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

在 view/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 很陌生。感谢您的帮助!

【问题讨论】:

  • 我尝试了上面的代码并且工作正常。我可以保存与 group_id 的联系,而无需更改您的代码。请再检查一次。您是否在控制器的参数中获取 group_id?
  • 正如您所指出的,代码正在运行。就像你说的,我忘记在控制器 group_params 中包含 group_id。现在它运行良好。如果您将评论作为答案发布,我将批准它作为正确答案。谢谢!
  • 欢迎您!作为答案发布。

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


【解决方案1】:
<%= f.select :group_id, options_from_collection_for_select(Group.all, , 'id', 'name') %>

这会对你有所帮助。

【讨论】:

  • 一个逗号太多。但没有它也能正常工作
【解决方案2】:

我试过上面的代码,它工作正常。我可以保存与 group_id 的联系,而无需更改您的代码。请再检查一次。您是否在控制器的参数中获取 group_id ?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多