簡體   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