11

所以我熟悉了rails,当然还有rails 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'

4

4 回答 4

9

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


你可以做两件事:

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

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

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

于 2013-10-16T09:24:35.593 回答
8

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

喜欢,

before_create :check_params

def check_params   
   self.category.downcase!     
end
于 2013-10-16T09:18:14.567 回答
2

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

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

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

a = params([:model_name][:id])
a.downcase!
于 2015-09-22T22:28:38.210 回答
1

做这个:-

before_create :downcase_category

def downcase_category
 self.category.downcase!
end
于 2013-10-16T09:26:26.680 回答