繁体   English   中英

当用户从下拉菜单中选择名称时,将外键保存在我的表单中

[英]Saving a foreign key in my form when a user selects a name from the dropdown menu

我是Ruby on Rails的新手,很沮丧。 作为练习的一部分,我正在创建一个应用程序,让人们输入他们的目标,描述,最后期限并将其分配给一个人。

我有两个模型,一个用户模型和一个目标模型。 在创建新目标的ERB表单中,我创建了一个包含所有已创建用户的下拉菜单,但是现在我不知道如何将其转换为保存的外键。

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

......

    <div class="field">
       <%= f.label :user_id, "Whose goal is it?" %><br>
       <%= collection_select(:goals, :user_id, User.all, :id, :name, prompt: true ) %>
    </div>

  </div>

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

以上似乎创建了我需要的下拉菜单。 我只是不知道如何从下拉列表中生成的:name到与之关联的:user_id提交。

将不胜感激您的帮助。

谢谢!

首先,您应该在collection_select使用单数作为object

<%= collection_select(:goal, :user_id, User.all, :id, :name, prompt: true ) %>

然后,您的collection_select创建一个名称为goal[user_id]select标记。 看起来像

    <select name="goal[user_id]">
      <option value="">Please select</option>
      <option value="1" selected="selected">D. Heinemeier Hansson</option>
      <option value="2">D. Thomas</option>
      <option value="3">M. Clark</option>
    </select>

这些选项的用户ID为value ,名称为内容。 所以参数

params[:goal][:user_id]

包含所选用户的ID。 这正是Rails期望外键的方式。

请参阅collection_select的文档

补充:有许多很棒的宝石可以简化表单生成,即simple_form可以将表单缩减为

<%= simple_form_for(@goal) do |f| %>
  ...  
  <%= f.association :user %>
<% end %>

您的问题已得到解答,但我想分享一个很棒的教程:

进阶表格

只需添加到您的“新”控制器

@user_options = User.all.map{|u| [ u.name, u.id ] }

然后以您的形式:

 <%= f.select(:user_id, @user_options) %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM