我正在开发一个电子商务应用程序。我想把created_at
赋给一个属性。
陈旧的Product
库存被“发送”/“提交”到SaleController
,创建一个销售产品。
1.我试图将时间created_at
分配给sale_start_time
-模型Sale
的一个属性-稍后我可以使用它来触发降价,例如@sale_start_time+5day
。在Sale
模型中:
def sale_start_time
@sale.created_at
end
这不起作用,@sale_start_time = @sale.created_at
也不起作用--即使在视图中,例如sales#show
,@sale.created_at
返回created_at
时间。
1.我还尝试将其放置在销售模型after commit
中(尽管我不能确定是否可以在提交后一次更改两个属性)。Product
确实会将product_on_sale: false
切换到product_on_sale: true
(实际上,这会将其从产品库存中删除)。属性的Sale
更新不起作用。它'引发' 'id'={:id=>nil}
,我的用户Sale.find_by(@product_id)...
,但是,product_id
可能不等于sale_id
。
def update_status
Product.find_by(@product_id).toggle!(:product_on_sale)
Sale.find(id: @id).update(sale_start_time: @sale.created_at)
end
提前感谢您的帮助。
1条答案
按热度按时间pinkon5k1#
如果我正确理解了你的问题,你可以在
after_create
回调中分配它。在
Sale
模型中添加以下内容:OP编辑:如果控制器方法
def create
将销售定义为@sale = Sale.create(sale_params)
'create'设置了sale id
,则此方法有效。我使用的是@sale = Sale.new(sale_params)
,它在事务提交之前不会设置sale id
。