簡體   English   中英

Rails select標記,使用belongs_to關聯

[英]Rails select tag using belongs_to association

我有以下型號:

產品:

class Product < ActiveRecord::Base
  belongs_to :user
...
end

用戶

class User < ActiveRecord::Base
  has_many :products
end

在我的產品視圖中,我需要一個用戶下拉列表,選擇用戶后,該列表應與該特定產品關聯。

這是我的看法:

<%= form_tag (update_user_products_path) do %>
<%@products.each do |product| %>
            <div class = "prod">
            <a href='<%= recommendations_path(:product_id => product.id, :rating_set_id => params[:rating_set_id]) %>' target="_blank"><img src='<%= product.cover_img %>' class='product_image_prods'></img></a>
            <div class= "title"><small><b><%= link_to truncate(product.title, :length =>30),  recommendations_path(:product_id => product.id, :rating_set_id => params[:rating_set_id]), :target => '_blank' %></b></small></div>
            <br/>
            <div><em>Current Rating: <%= product.rating %> </em></div>
            <%= hidden_field_tag :product_id, product.id %>
            <%= select_tag "user_id", options_for_select(User.all.collect {|u| [ u.name, u.id ] })%>
            </div>

            <% end %>
    <%= submit_tag %>
<% end %>

我對於應該使用form_tag並更新Product.user_id還是應該為我的產品中的用戶模型使用nested_attributes感到困惑?

更新:

產品控制器動作:

def update_user
    @product = Product.find(params["product_id"])
    @product.update_attribute(:user_id, params[:user_id])
    redirect_to :back, :flash => { :notice => "Updated users" }
  end

也更新了我的觀點。 如何使用正確的user_id更新所有產品記錄。 目前,當我提交我的信息時,它只會更新1條產品記錄。

您要做的就是確定哪個用戶與哪個產品相關聯。

例如(使用product.id連接標簽)

<%= form_tag(update_user_path, :id => "update_user_form") do %>
   <%@products.each do |product| %>
      <%= select_tag "user_id:#{product.id}", options_for_select(User.all.collect {|u| [ u.name, u.id ] })%>
   <% end %>
<% end %>

提交時,您將獲得包含產品ID和所選用戶ID的密鑰。

例如,假設product.id = 1user.id = 2

params將包括

key => user_id:1 value=> 2

因此,獲取密鑰並將其分割為:將為您提供product_id然后獲取該哈希條目的值將為您提供該產品的選定user.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM