如何在Rails控制器创建方法中为允许的参数自动赋值

时间:2015-08-17 12:59:29

标签: ruby-on-rails ruby

我有Ruby On Rails应用程序。我在我的CommentsController中创建了方法,我希望始终自动将值分配给其中一个允许的字段(在我的例子中为:commenter)“

class CommentsController < ApplicationController
  def create
    @meme = Meme.find(params[:meme_id])
    @comment = @meme.comments.create(comment_params)
    redirect_to meme_path(@meme)
  end

  private
    def comment_params
      params.require(:comment).permit(:commenter, :body)
    end
end

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:3)

将它与comment_params一起合并,你可以在第二个哈希中添加你想要的更多参数作为键和值

def comment_params
  params.require(:comment).permit(:body).merge!({commenter: 'default_value'})
end

答案 1 :(得分:2)

首先,您应该对用户进行身份验证。由于当前用户已通过身份验证,因此无需在参数中传递给他。你可以这样做:

class CommentsController < ApplicationController

  before_action :authenticate_user!

  def create
    @meme = Meme.find(params[:meme_id])
    @comment = @meme.comments.create(comment_params)

    redirect_to meme_path(@meme)
  end

private

    def comment_params
      params.require(:comment).permit(:body).merge(commenter: current_user)
    end
end

答案 2 :(得分:2)

您可以使用tap

def comment_params
  params.require(:comment).permit(:commenter, :body).tap do |comment|
    comment[:commenter] = "some value here"
    comment[:any_other_key] = "some other value"
  end
end

答案 3 :(得分:1)

您可以在迁移中添加t.string :commenter, default: "default_commenter"吗?这样,如果您正在使用控制台,那么您将不会得到空值。它还将清理控制器代码。