Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 轨道&x2014;修改控制器中的嵌套参数_Ruby On Rails_Ruby On Rails 5_Strong Parameters - Fatal编程技术网

Ruby on rails 轨道&x2014;修改控制器中的嵌套参数

Ruby on rails 轨道&x2014;修改控制器中的嵌套参数,ruby-on-rails,ruby-on-rails-5,strong-parameters,Ruby On Rails,Ruby On Rails 5,Strong Parameters,我有一个表单,用户在其中键入货币值,如6.50 保存记录时,我想用美分来保存它,比如650 如何更改参数 center:{ticket\u属性:{value:'6.50'}} 到 center:{ticket\u属性:{value:'650'}} 在更新方法中?我无法在模型中更改它,int字段将已切掉.50尝试以下操作: def method_where_you_want_to_change_params if resource_params[:resource_name].present?

我有一个表单,用户在其中键入货币值,如
6.50

保存记录时,我想用美分来保存它,比如
650

如何更改参数

center:{ticket\u属性:{value:'6.50'}}

center:{ticket\u属性:{value:'650'}}

更新
方法中?我无法在模型中更改它,
int
字段将已切掉
.50

尝试以下操作:

def method_where_you_want_to_change_params
  if resource_params[:resource_name].present?
    new_ticket_attributes = resource_params[:ticket_attributes]
    param_to_change = new_ticket_attributes[:value]
    param_to_change = params_to_change * 100
    new_ticket_attributes[:value] = param_to_change
  end

  modified_params = resource_params
                    .except(:ticket_attributes)
                    .merge(:new_ticket_attributes)

  # work with your resource as you need, create or modify
  # for example
  @resource = resource_class.new modified_params
end

protected

def resource_params
  params.permit(... list of your params, as usual...)
end

是的,可以在
update
方法中这样做。请记住,由于您使用的是
强参数
,因此不应更改
参数
散列本身。相反,在结果参数哈希被
强参数列为白名单后更改它:

class TicketsController < ApplicationController

  def update
    # first, get whitelisted params
    update_params = update_ticket_params
    # then perform convertion
    update_params[:value] = value_in_cents(update_params[:value])

    @ticket.update(update_params)
    # ...
  end

  private

  def update_ticket_params
    params.require(:ticket).permit(:value, ...)
  end

  def value_in_cents(value_in_dollars)
    # TODO: convert dollars to cents
  end
end
使用这种方法,您可以从表单中将您的值传递为
value\u(单位:美元)
。控制器将如下所示:

class TicketsController < ApplicationController

  def update
    @ticket.update(update_ticket_params)
    # ...
  end

  private

  def update_ticket_params
    # expect 'value_in_dollars' value from the form, not 'value'
    params.require(:ticket).permit(:value_in_dollars, ...)
  end
end
class ticketcontroller
请提供完整的控制器代码。添加这样的解决方法是不好的做法。像这样的事情可能会导致您遇到不同的问题,这将很难在一段时间后进行调试。为什么不直接修改db中的列来存储浮点数,然后运行迁移来将整数修改为浮点数呢?
class TicketsController < ApplicationController

  def update
    @ticket.update(update_ticket_params)
    # ...
  end

  private

  def update_ticket_params
    # expect 'value_in_dollars' value from the form, not 'value'
    params.require(:ticket).permit(:value_in_dollars, ...)
  end
end