Pregunta

Tengo un modelo de usuario que tiene muchos artículos. A Régimen pertenece a un usuario y un elemento.

En el DB, he puesto ratings.user_id ser no es NULL.

cuando estoy creando un artículo, me gustaría hacer esto:

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

Sin embargo, esto se resiste con un error SQL "user_id no puede ser nulo"

so Reescribí el método crear

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

que funciona muy bien.

Sin embargo, yo había pensado que el encadenamiento de crear métodos fuera el receptor del usuario actual habría poblado user_id de la calificación. Alguien sabe por qué no?

TIA.

¿Fue útil?

Solución

Me gustaría recomendar a normalizar esto si es posible en la base de datos. Tal vez sacar el atributo user_id de la tabla de calificaciones y si lo necesita en su modelo de conseguirlo a través de una combinación utilizando una: a través del método

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

Otros consejos

Si ha creado y guardado el artículo, después hizo una Clasificación de ese elemento, no pasaría al usuario a lo largo de la Clasificación, ¿verdad? Acababas refieren a ella como @ rating.item.user, ¿verdad?

Cuando se piensa en ello de esa manera, no se esperaría que el artículo creado a través de la current_user para pasar la información de usuario junto a la calificación.

que me pregunte si realmente necesita la relación calificaciones has_many usuario.

Debido artículo tiene muchas clasificaciones y que la asociación no saber acerca de la identificación del usuario. Teniendo en cuenta que la cadena de asociación de artículos tendría un ID de usuario, ya que pertenece a un usuario. Clasificación y tendría un ID de artículo, ya que pertenece a un elemento. Pero el artículo de Clasificación assocation no sabe nada acerca de un usuario a menos que usted le indique.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top