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

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

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

def post_params params.require(:post).permit(:title, :content, :category) end 

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

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

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

我试过了

 params.require(:post).permit(:title, :content, :category) params[:category].downcase 

 params.require(:post).permit(:title, :content) params.require(:post).permit(:category).downcase 

但我得到undefined method 'downcase'

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


你可以做两件事:

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

 def create params[:category].downcase @post = Post.new(post_params) @post.save end 

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

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

喜欢,

 before_create :check_params def check_params self.category.downcase! end 

如果您使用的是Rails 4,则可能不起作用:即使您通过强params明确地将它们列入白名单,也不再接受您篡改的参数。

看起来Rails正在检测变化并阻止它被允许。

可能更好的方法是从控制器操作中的参数中检索值并将它们设置为小写:

 a = params([:model_name][:id]) a.downcase! 

做这个:-

 before_create :downcase_category def downcase_category self.category.downcase! end