ruby-on-rails Rails如何将模型和/或模型回调中的created_at分配给属性

pdtvr36n  于 2023-07-01  发布在  Ruby
关注(0)|答案(1)|浏览(134)

我正在开发一个电子商务应用程序。我想把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

提前感谢您的帮助。

pinkon5k

pinkon5k1#

如果我正确理解了你的问题,你可以在after_create回调中分配它。
Sale模型中添加以下内容:

class Sale
  # other stuff
  after_create :assign_start_time  

  # other methods

  private

  def assign_start_time
    self.sale_start_time = created_at
    self.save!
  end
end

OP编辑:如果控制器方法def create将销售定义为@sale = Sale.create(sale_params) 'create'设置了sale id,则此方法有效。我使用的是@sale = Sale.new(sale_params),它在事务提交之前不会设置sale id

相关问题