2010-12-03 17 views
31

¿Cómo puedo agregar user_id en params [: página]? No quiero usar campos ocultos.Agregar variable a params en raíles

@page= Page.new(params[:page]) 

¿Hay una manera de utilizar como

@page= Page.new(:name=>params[:page][:name], :user_id => current_user.id) 
+1

Tengo curiosidad: ¿qué hay de malo en usar campos ocultos? – sscirrus

+1

@sscirrus: los campos ocultos se pueden ver en el código fuente HTML en el cliente. Si desea agregar información sensible al modelo (es decir, UUID), entonces sería mejor agregar el campo al modelo en el lado del servidor. – laker

Respuesta

16

En lugar de hacerlo de esa manera, la construcción de la asociación (asume que tiene has_many :pages en el modelo User):

@page = current_user.pages.build(params[:page]) 

Este configurará automáticamente user_id para el objeto Page.

+1

si tengo que agregar más de 1 clave externa ¿cómo funcionará? – Rails101

+3

@ Rails101: current_user.pages.build (params [: page] .merge (: other_id => other_id) –

58

utilizo este día tras día:

@page= Page.new(params[:page].merge(:user_id => 1, :foo => "bar")) 
+0

Solo quiero agregar que esto funciona con un número ilimitado de atributos. – efalcao

+2

omg Lo busqué durante tanto tiempo. Gracias ! – DonMB

+0

funcionará si lo hago (: user_id => 1) .merge (params)? – Ephraim

2

En lugar de tratar de fusionar el current_user ID, puede construir las asociaciones de modelos adecuados y luego alcance los new() método

Modelos

class Page < ActiveRecord::Base 
belongs_to :user 
end 

class User < ActiveRecord::Base 
has_many :pages 
end 

Controller

if current_user 
@page = current_user.pages.new(params[:page]) 
else 
@page = Page.new(params[:page]) 
end