嵌套PARAM我哪裏像6.50
Rails的修改控制器
當被保存在記錄一個物有所值的用戶類型,我想將它保存在仙像650
形式。
如何改變帕拉姆
center: { ticket_attributes: { value: '6.50' } }
到
center: { ticket_attributes: { value: '650' } }
在update
方法是什麼?我無法改變它在模型的int
場就已經砍掉.50
嵌套PARAM我哪裏像6.50
Rails的修改控制器
當被保存在記錄一個物有所值的用戶類型,我想將它保存在仙像650
形式。
如何改變帕拉姆
center: { ticket_attributes: { value: '6.50' } }
到
center: { ticket_attributes: { value: '650' } }
在update
方法是什麼?我無法改變它在模型的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
方法。請記住,由於您使用的是strong-parameters
,因此您不應該更改params
散列本身。
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
爲了更好地理解我所談論的和可能出現的問題看這個(Modify ruby hash in place(rails strong params))
另一種方法
您:相反,它是由strong-parameters
列入白名單後,改變結果參數哈希可以使用虛擬屬性在模型級別上轉換值。無論何時將虛擬屬性(這是:value_in_dollars
),它會轉換並分配value
屬性:
class Ticket < ApplicationRecord
attr_accessor :value_in_dollars
# whenever you set :value_in_dollars, it converts and assigns :value
def value_in_dollars=(value)
self.value = value_in_cents(value)
end
private
def value_in_cents(value_in_dollars)
# TODO: convert dollars to cents
end
end
使用這種方法,你可以通過你的價值value_in_dollars
從形式。控制器將如下所示:
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
請提供完整的控制器代碼。 –
這是不好的做法,添加像這樣的解決方法。像這樣的事情可能會導致你不同,這將是一段時間後很難調試。爲什麼不只是在db中修改你的列來存儲浮動和運行遷移,這會將你的整數修改爲浮動? – Avdept