2012-10-06 20 views
9

Tengo un formulario para crear materiales (título, descripción y contenido, todo básico). El formulario guarda estos detalles muy bien, pero no guarda el user_id, que debería ser el user_id del current_user. ¿Cómo hago esto? Debe ser fácil, pero nada ha funcionado hasta ahora.¿Cómo agregar current_user a user_id a form_for en rieles?

def create 
    @material = Material.new(params[:material]) 
    if @material.save 
    flash[:success] = "Content Successfully Created" 
    redirect_to @material 
    else 
    render 'new' 
    end 
end 

Respuesta

10
def create 
@material = Material.new(params[:material]) 
@material.user_id = current_user.id if current_user 
if @material.save 
    flash[:success] = "Content Successfully Created" 
    redirect_to @material 
else 
    render 'new' 
end 
end 
+0

Gracias. Eso es genial. – Finnjon

2

Suponiendo que está guardando objeto de los usuarios de inicio de sesión en el current_user siguiente funcionará para usted

@material = Material.new(params[:material]) 
    @material.user_id = current_user.id 
    if @material.save 
3

Hay algunas maneras diferentes de hacerlo dependiendo de cómo usted tiene su configuración de la aplicación. Si existe una relación entre el usuario y los materiales (usuario tiene muchos materiales), se puede usar eso en su controlador:

def create 
    @material = current_user.materials.new(params[:material]) 
    # ... 
end 

Si usted no tiene esa relación, aun así, recomendaría el establecimiento en el controlador a diferencia de un campo oculto en la forma. Esto será más seguro, ya que no va a dejar que alguien altere el valor de ID de usuario:

def create 
    @material = Material.new(params[:material].merge(user_id: current_user)) 
    # ... 
end 
+0

Sí he estado pensando acerca de cómo configurar las asociaciones. Me contuve porque, aunque un usuario crea materiales, puede llegar un momento en que varios usuarios crean materiales y yo no quería lidiar con eso todavía. ¡Gracias! – Finnjon

Cuestiones relacionadas