Rails使用belongs_to关联选择标记

时间:2013-02-08 19:17:05

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我有以下型号:

产品:

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个产品记录。

1 个答案:

答案 0 :(得分: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