我是一个全新的 Rails 开发人员,所以请多多包涵:-)
我在 Rails 中有两个名为 Product 和 ProductPrice 的模型。
这是 ProductPrices 的外观:
class CreateProductPrices < ActiveRecord::Migration
def change
create_table :product_prices do |t|
t.integer :product_id
t.date :since
t.decimal :price
t.boolean :current
t.timestamps
end
end
end
这就是模型的外观:
class ProductPrice < ActiveRecord::Base
belongs_to :product
attr_accessible :current, :price, :product_id, :since
end
现在我希望通过产品可以访问价格。它应该始终显示当前价格(只能有一个当前价格/产品。用户还应该能够通过产品编辑价格。如果价格在产品更新中发生变化,则应插入新的 ProductPrice current = true and since = 当前日期。旧的 ProductPrice 应该不再是最新的。
我已经找到了有关嵌套属性的文章,我认为这就是要走的路。谁能告诉我应该怎么做?
编辑:感谢您的回复,我尝试按照您的说法实施,我现在在 product.rb 中有这个:
class Product < ActiveRecord::Base
belongs_to :menu_category
belongs_to :menu
has_many :product_prices, :dependent => :delete_all
scope :latest_price, lambda {product_prices.where("since <= ?",DateTime.now).order(:since).last}
attr_accessible :active, :descFR, :descNL, :image, :menu_category_id, :menu_id, :nameFR, :nameNL
mount_uploader :image, ImageUploader
end
在我的产品索引页面中,我拥有:
<tbody>
<% @products.each do |product| %>
<tr>
<td><%= product.nameNL %></td>
<td><%= product.nameFR %></td>
<td><%= product.descNL %></td>
<td><%= product.descFR %></td>
<td><%= product.latest_price.price.to_s %></td>
我也尝试过:product.latest_price.price 或 product.latest_price 我还尝试将 latest_price 添加到 attr_accessible
但我总是得到这个错误:
undefined method `latest_price' for #<Product:0x49e1e48>
EDIT2:它现在可以工作了。我还发现如果我添加这个:
def latest_price=(val)
pp = ProductPrice.where(:product_id => self.id, :since => DateTime.now.to_date).first_or_create(:price => val)
pp.price = val
pp.save
end
然后它完全完成了我在问题中所要求的。