Establecer valores previamente establecidos en el controlador en nested_attributes a través del modelo

Anteriormente estaba agregando mi identificación de usuario actual a mis pistas a través del método de creación del controlador de pista usando:

@track.user_id = current_user.id

Esto funcionó bien, sin embargo, ahora he anidado pistas dentro de mi modelo de lanzamientos y estoy tratando de hacer lo mismo a través de devoluciones de llamada en mi modelo de lanzamientos usando:

before_save :add_user_to_tracks
before_update :add_user_to_tracks

def add_user_to_tracks
  tracks.each { |t| t.user_id = self.current_user.id}
end

Obtengo un método indefinido `usuario_actual' error, sin embargo, sé que esto está muy cerca de funcionar como si lo probara usando "99" en lugar de self.current_user.id, agrega 99 a user_id para cada pista en la base de datos.

Alguna idea de por qué no puedo acceder usuario_actual.id

preguntado el 03 de mayo de 12 a las 15:05

1 Respuestas

Creo que deberías enviar user_id desde tu formulario usando un campo oculto.

Si no tiene user_id en el modelo de lanzamiento. Puede crearlo como atributo virtual.

class Release < ActiveRecord::Base
  attr_accessor :user_id

  before_save :add_user_to_tracks 
  before_update :add_user_to_tracks

  def add_user_to_tracks
    tracks.each { |t| t.user_id = user_id}
  end
end

contestado el 03 de mayo de 12 a las 16:05

User_id es de Devise, así que esperaba que estuviera disponible a nivel mundial. Sin embargo, le daré una oportunidad a tu sugerencia. ¡Gracias! - Raoot

Puede usar el ayudante current_user solo en el controlador y la capa de vista, no en los modelos: Suborx

Pero me temo que tiene un concepto de guardado incorrecto y sus pistas no se guardarán. Pero eso solo mi sentimiento. :) - Suborx

Tengo esto antes del código que publiqué y, según tengo entendido, esto me guardará las pistas: accepts_nested_attributes_for:tracks,:reject_if => lambda { |a| un[:nombre].en blanco? }, :permitir_destruir => :verdadero - Raoot

Sí, esa es la manera correcta, pero creo que no es tan fácil. De todos modos, buena suerte :) - Suborx

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.