所以我熟悉轨道和轨道4。
所以这就是我在控制器底部的内容
def post_params
params.require(:post).permit(:title, :content, :category)
end
哪种方法很好,但我想要做的是弄清楚如何在post_params方法中或者稍后在控制器中单独访问这些参数。
具体来说,我想在创建帖子时使用参数之前将: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'
答案 0 :(得分:8)
strong_params
功能只是为您的控制器提供可以使用的变量“白名单”。它实际上是出于安全目的,字面上只是意味着您的应用程序可以访问params [:allowed_param]来保存数据。
你可以做两件事:
- >在调用post_params函数之前编辑params [:category]变量:
def create
params[:category].downcase
@post = Post.new(post_params)
@post.save
end
- >您也可以使用@thiyaram推荐的before_create函数:)
答案 1 :(得分:7)
更好您可以使用before_create
回调来更新值。
等
before_create :check_params
def check_params
self.category.downcase!
end
答案 2 :(得分:2)
如果您使用的是Rails 4,则可能无效:即使您通过强制参数明确地将它们列入白名单,也不再接受您篡改的参数。
看起来Rails正在检测更改并阻止其被允许。
可能更好的方法是从控制器操作中的参数中检索值并将它们设为小写:
a = params([:model_name][:id])
a.downcase!
答案 3 :(得分:1)
这样做: -
before_create :downcase_category
def downcase_category
self.category.downcase!
end