ruby-on-rails - new - rails permit param
Rieles 4: Insertar atributo en parĂ¡metros (3)
Además de la respuesta de @ timothycommoner, alternativamente puede realizar la fusión en función de cada acción:
def create
@post = Post.new(post_params.merge(user_id: current_user.id))
# save the object etc
end
private
def post_params
params.require(:post).permit(:some_attribute)
end
En Rails 3, fue posible insertar un atributo en params así:
params[:post][:user_id] = current_user.id
Estoy intentando hacer algo similar en Rails 4, pero no tengo suerte:
post_params[:user_id] = current_user.id
. . . .
private
def post_params
params.require(:post).permit(:user_id)
end
Rails está ignorando esta inserción. No lanza ningún error, simplemente falla silenciosamente.
Como alternativa para este caso, puede requerir un atributo de paso a través del scope
:
current_user.posts.create(post_params)
Encontré la respuesta here . En lugar de insertar el atributo desde la acción del controlador, puede insertarlo en la definición de parámetros con una combinación. Para ampliar mi ejemplo anterior:
private
def post_params
params.require(:post).permit(:some_attribute).merge(user_id: current_user.id)
end