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