【问题标题】:How to make changes to strong parameters (change to lowercase)如何更改强参数(更改为小写)
【发布时间】:2013-10-16 08:56:50
【问题描述】:

所以我正在熟悉 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'

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    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 函数 :)

    【讨论】:

    • 这绝对是最有帮助的答案(至少对我而言)。
    • 如果.downcase 不存在,请尝试.downcase!
    • 添加 !做到了。但它只在 create 方法内有效,在 post_params 内无效,我也有……不知道为什么。
    【解决方案2】:

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

    喜欢,

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

    【讨论】:

    • 你必须使用!运营商..否则它不会更新。
    • 值得注意的是,这个回调是在模型上,而不是控制器上。
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      这样做:-

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

      【讨论】:

      • 你不应该以这种方式使用 Rails 回调
      • @bob_d 好奇——为什么不呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 2019-07-20
      • 2020-12-29
      相关资源
      最近更新 更多