Question

J'ai un modèle utilisateur qui a de nombreux articles. Une Note appartient à un utilisateur et un élément.

Dans la DB, j'ai mis ratings.user_id ne pas être NULL.

quand je suis en train de créer un élément, je voudrais faire ceci:

  def create
    current_user.items.create(params[:item]).ratings.create(params[:rating]
    redirect_to items_path
  end

Cependant, cette renâcle avec une erreur SQL « user_id ne peut pas être nul »

donc je réécrit la création Procédé

  def create
    current_user.items.create(params[:item]).ratings.create(params[:rating].merge({:user_id => current_user}))
    redirect_to items_path
  end 

qui fonctionne très bien.

Cependant, je pensais que enchaînant les créer des méthodes de récepteur de l'utilisateur actuel aurait peuplé la user_id de la cote. Quelqu'un sait pourquoi pas?

TIA.

Était-ce utile?

La solution

Je vous recommande de normaliser cela si possible dans la base de données. Peut-être prendre l'attribut user_id de la table cotes et si vous avez besoin dans votre modèle obtenir par une jointure en utilisant un: par la méthode

class Rating
    has_many :items
    has_one :user, :through=>:items

Autres conseils

Si vous avez créé et enregistré l'élément, puis fait une Note de cet article, il ne passerait pas l'utilisateur le long de la Note, non? Vous souhaitez juste faire référence à lui comme @ rating.item.user, droit?

Quand vous pensez comme ça, vous ne penseriez pas l'objet créé par le current_user pour transmettre les informations d'utilisateur ainsi que la note.

Fais-moi me demande si vous avez vraiment besoin de l'has_many utilisateur relation de notation.

Parce que l'article a de nombreuses évaluations et que l'association ne connaît pas l'ID utilisateur. Étant donné que la chaîne d'association Point aurait un nom d'utilisateur, car il appartient à un utilisateur. Et Note aurait un code d'article parce qu'il appartient à un élément. Mais le point de Note assocation ne sait rien au sujet d'un utilisateur, à moins que vous lui dites.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top