Rails 4: Insérer L'Attribut Dans Les Paramètres

Dans Rails 3, Il était possible d'insérer un attribut dans les paramètres comme ceci:

params[:post][:user_id] = current_user.id

J'essaie de faire quelque chose de similaire dans Rails 4, mais sans chance:

post_params[:user_id] = current_user.id

. . . .


private

  def post_params
    params.require(:post).permit(:user_id)
  end

Rails ignore cette insertion. Il ne jette aucune erreur,il échoue tranquillement.

61
demandé sur nullnullnull 2013-05-14 00:27:27

3 réponses

Trouvé la réponse ici. Plutôt que d'insérer l'attribut à partir de l'action du contrôleur, vous pouvez l'insérer dans les paramètres de définition d'une fusion. Pour développer mon exemple précédent:

private

  def post_params
    params.require(:post).permit(:some_attribute).merge(user_id: current_user.id)
  end
127
répondu nullnullnull 2013-05-22 18:48:13

En plus de la réponse de @timothycommoner, vous pouvez également effectuer la fusion par action:

  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
32
répondu Numbers 2014-06-18 00:04:10

Comme alternative pour ce cas, vous pouvez exiger l'attribut pass via scope:

current_user.posts.create(post_params)

2
répondu BitOfUniverse 2016-07-12 10:29:08