1

Arg、私はRoRの初心者で、自分のやり方を感じています。ここで試したすべての可能な合理的な組み合わせは失敗しました。ポインタは非常に高く評価されています。

だから私はアイテムとステータスを持っています。アイテムには、status_idによって参照されるステータスがあります。

class Status < ActiveRecord::Base
  has_many :items
end

Class Item < ActiveRecord::Base
  belongs_to :status
end

ステータスは、「売り出し中」、「削除済み」、「非表示」、「販売済み」などのようになります。

私のウェブサイトのフロントページには、最後に追加された30個のアイテムがランダムな順序で表示されています。

<% latest_items = Items.last(30).shuffle %>
<% latest_items.each do |i| %>
  :
<% end %>

ただし、アイテムのステータスがフロントページに表示されるように設定されているアイテムのみを表示したい(たとえば、ステータスが「売り出し中」または「販売済み」で、非表示ではないアイテムのみを表示する)。

アイテムの将来のステータスを追加したい場合があるので、statussテーブルを更新して、front_pageに表示するかどうかに応じて、1または0に設定された列front_pageを含めました。フロントページに複数のステータスを表示できます。

このstatus.front_pageフィールドを参照する方法を理解し、アイテムの限定された配列を構築するのに苦労しています。私は多くのことを試しましたが、何も機能していません。私は間違った木を完全に吠えていますか?

関連性がある場合は、Ruby 1.9.2p320 /Rails3.1.0.rc8を使用しています。

4

1 に答える 1

2

where(条件) ステートメントを使用してみてください

Item.joins(:status).where(:statuses => {:name => ["For Sale", "Sold"]}).last(30)

これをスコープに入れることもできます

Class Item < ActiveRecord::Base
  scope :homepage_display, joins(:status).where(:statuses => {:name => ["For Sale", "Sold"]}).last(30)

# Then in your view
Item.homepage_display

関連付けを切り替えることもお勧めします。アイテムはbelong_toステータスにすべきではありません

于 2012-08-18T15:20:09.640 に答える