Establecer valores previamente establecidos en el controlador en nested_attributes a través del modelo
Frecuentes
Visto 57 veces
0
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
1 Respuestas
1
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails ruby-on-rails-3 activerecord or haz tu propia pregunta.
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