如何更改强参数(更改为小写)

Mel*_*991 10 ruby-on-rails ruby-on-rails-4

所以我熟悉轨道和轨道4.

所以这就是我控制器底部的内容

def post_params
  params.require(:post).permit(:title, :content, :category)
end
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但我想要做的是弄清楚如何在post_params方法中或者稍后在控制器中单独访问这些参数.

具体来说,我想在创建帖子时使用参数之前将:category值更改为小写(因此在表中所有类别都是小写的).

编辑:也许更好的措辞我的问题是,在允许参数之后,我怎样才能访问和操纵它们.我可以像往常一样使用params [:title]吗?

我试过了

params.require(:post).permit(:title, :content, :category)
params[:category].downcase
Run Code Online (Sandbox Code Playgroud)

params.require(:post).permit(:title, :content)
params.require(:post).permit(:category).downcase
Run Code Online (Sandbox Code Playgroud)

但我明白了 undefined method 'downcase'

Ric*_*eck 8

strong_params功能只是为您的控制器提供一个"白名单"变量.它实际上是出于安全目的,字面上只是意味着您的应用程序可以访问params [:allowed_pa​​ram]来保存数据.


你可以做两件事:

- >在调用post_params函数之前编辑params [:category]变量:

def create
    params[:category].downcase
    @post = Post.new(post_params)
    @post.save
end
Run Code Online (Sandbox Code Playgroud)

- >你可以使用@thiyaram推荐的before_create函数:)

  • 如果“.downcase”不存在,请尝试“.downcase!” (2认同)

小智 7

更好您可以使用before_create回调来更新值.

喜欢,

before_create :check_params

def check_params   
   self.category.downcase!     
end
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,这个回调是在模型上,而不是在控制器上。 (2认同)