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で更新するにはどうすればよいですか。現在、fromを送信すると、1つの製品レコードのみが更新されます。

4

1 に答える 1

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

于 2013-02-08T22:30:29.927 に答える