【问题标题】:Virtual attributes in rails modelRails 模型中的虚拟属性
【发布时间】:2011-03-11 23:27:24
【问题描述】:

在我的控制器中,我在 for 循环中调用 @hour.shopper.add_product。

我的模型看起来像:

class Shopper < ActiveRecord::Base

  attr_accessor :quantity

  def add_product
     if self.quantity.nil? || \
        self.quantity == 0
      self.quantity = 1 
    else 
      self.quantity += 1
    end 
    self.save
  end 

end

当我打印@hour.shopper.quantity 时,它总是显示“nil”。似乎它没有在 @hour.shopper 对象中保存数量属性。

提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    嗯,是的,实例变量没有保存到数据库中(它们怎么会保存?没有它们的列)。

    由于问题的标题是“虚拟属性”,我将假设您的数据库表中没有数量列(如果有,只需删除 attr_accessor 位),但是您如果您希望它持续存在,仍然需要将数量存储在某个地方。

    当某些属性不直接存储在数据库中时,通常会使用虚拟属性,但可以从该属性转换为该属性。在这种情况下,情况似乎并非如此,所以我只能建议您在数据库表中添加一个数量列。

    【讨论】:

    • 我不需要数量属性来持久化。我希望它是一个实例变量。我认为将其设为虚拟属性将使其成为模型对象(在本例中为 @hour.shopper)的属性,用于对象的生命周期。
    • @sbox32:确实如此。但是,每次执行@hour.shopper 时都不会返回相同的对象。如果您执行shopper = @hour.shopper 然后对shopper 进行操作,只要shopper 在范围内,quantity 的值就会持续存在。
    • 我明白了,我打印了@hour.shopper: #<0xb65d805c><0xb658be64><0xb657e930>
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多