2013-02-08 4 views
1

Je les modèles suivants:Rails de balise select en utilisant belongs_to association

Produit:

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

utilisateur

class User < ActiveRecord::Base 
    has_many :products 
end 

Dans mes articles voir je besoin d'une liste déroulante des utilisateurs et Lorsqu'un utilisateur est sélectionné, il doit être associé à ce produit spécifique.

Ceci est mon point de vue:

<%= 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 %> 

Je suis confus quant à savoir si je devrais utiliser form_tag et mis à jour Product.user_id, ou devrais utiliser nested_attributes pour le modèle d'utilisateur dans mon produit à partir?

MISE À JOUR:

Produits Contrôleur d'action:

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 

également mis à jour mon avis. Comment puis-je mettre à jour tous les enregistrements de produit avec l'id_utilisateur correct? Actuellement, lorsque je soumets mon, il met à jour seulement 1 enregistrement de produit.

+0

Comment allez-vous les associer? avec Ajax ou sur le formulaire soumettre? –

+0

sur le formulaire soumettre. – Yogzzz

+0

S'il vous plaît voir ma question mise à jour. – Yogzzz

Répondre

1

Tout ce que vous avez à faire est de déterminer quel utilisateur était associé à quel produit.

Par exemple (accrochage de l'étiquette avec 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 %> 

Lorsque vous vous soumettez obtiendrez le la clé avec l'identifiant du produit et l'ID de l'utilisateur sélectionné.

Par exemple permet de dire product.id = 1 et user.id = 2

params comprendra

key => user_id:1 value=> 2 

afin de prendre la clé et le fractionnement sur : vous donnera la product_id alors obtenir la valeur de cette entrée de hachage vous donnera le user.id sélectionné pour ce produit.

+0

Comment séparer la clé et l'ID de mon contrôleur? L'appel de params [: user_id] ne renvoie rien. Merci! – Yogzzz

Questions connexes