首页 > 解决方案 > 如何在将参数发送到数据库之前对其进行修改

问题描述

我想在更新函数更新之前修改其中一个参数。

我可以提取价值做:abort house_show_params[:pricing_option].inspect但我想修改它。

我试过了:

house_show_params[:pricing_option] = 5
house_show_params.update_attribute(pricing_option: 5)

那没有用。

更新功能

def update
    @house_show = current_user.house_show
    respond_to do |format|
      if @house_show.update(house_show_params)
         ......

标签: ruby-on-railsrubyruby-on-rails-5

解决方案


我会使用该write_attribute方法在模型中执行此操作(控制器不是正确的位置)。
例如,如果我希望我的company_name字段在存储之前被剥离,我会这样做(在我的模型中):

def company_name=(value)
  self[:company_name] = value&.strip
end

这和做的一样(你可以选择你喜欢的任何方式):

def company_name=(value)
  my_model.write_attribute(:company_name, value&.strip)
end

此页面说明了您拥有的选项,尽管您应该通过上面的两个示例回答您的问题: https ://davidverhasselt.com/set-attributes-in-activerecord/


推荐阅读