私はまったく新しい Rails 開発者なので、ご容赦ください :-)
レールに Product と ProductPrice という名前の 2 つのモデルがあります。
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
ここで、製品を通じて価格にアクセスできるようにしたいと考えています。常に現在の価格を表示する必要があります (現在の価格/製品は 1 つだけです。ユーザーは製品を通じて価格を編集できる必要があります。製品の更新で価格が変更された場合は、新しい ProductPrice を挿入する必要があります)。 current = true and since = the current date. 古い 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
次に、質問で私が求めたことを完全に実行します。