比如 ...
def create
@prodcut = Prodcut.new
@prodcut.name = product_params[:name]
@prodcut.price = product_params[:price] * 2 #因为这一行
@prodcut.color = product_params[:color]
@prodcut.buyer = product_params[:buyer]
...
#(如果有更多我会一个个去写 累觉不爱)
if @prodcut.save
...
else
...
end
end
教程都是直接
@product.update(product_params)
就好 请问如何让它简单一点 (问题核心是简洁)
如果特殊并且通用的逻辑,可以实现 price=
方法:
class Prodcut
def price=(value)
self[:price] = value * 2
end
end
然后 Controller 那里就可以直接:
@product.update(product_params)
来更新了
@product.update(**product_params, price: product_params[:price] *2)
注意顺序
#1 楼 @watraludru 你这个方法我试了,着实可行 赞 要这么用 @product.update(product_params.merge(price: product_params.fetch(:price) * 2))
#5 楼 @qinfanpeng **
展开 hash,*
展开 array,ruby2 引入,一起引入的还有def t(a: 1)
,也算解构赋值了,这些可以组合使用 def t(a, *arr, b: 1, **hsh)
发现有时候思维就是卡住,我自己想到一个办法,感觉比以上都简单.... 这个方法呢,我没有试,但我感觉一定行 (只是感觉哦...试试了后我来更新)
def create
@product = Product.new(product_params)
@product.price *= 2
if @product.save
...
else
...
end
end