2

複数のテーブルからデータをプルする方法を理解し、それを理解しようとしています。

events、、テーブルがoccurrencesあります。venues

これまでのモデル/関連付けは次のとおりです。

models / event.rb:

class Event < ActiveRecord::Base
 has_many :occurences, :dependent => :destroy
 belongs_to :price
 belongs_to :venue
 validates_presence_of :venue
end

モデル/venue.rb:

class Venue < ActiveRecord::Base
 has_many :events, :dependent => :destroy
end

models /occurence.rb:

class Occurence < ActiveRecord::Base
 belongs_to  :event
 scope :today, lambda { where("occurence.datetime_start <= ? AND datetime_end >= ?", Time.now.end_of_day, Time.now) }
 scope :this_week, lambda { where("occurence.datetime_start <= ? AND datetime_end <= ?", Time.now.end_of_day, Time.now.at_end_of_week) }
 scope :next_week, lambda { where("occurence.datetime_start > ? AND datetime_end < ?", Time.now.at_end_of_week, Time.now.at_end_of_week + 1.weeks) }
 scope :this_month, lambda { where("occurence.datetime_start <= ? AND datetime_end >= ?", Time.now.end_of_day, Time.now.at_end_of_month) }
 scope :next_month, lambda { where("occurence.datetime_start >= ? AND datetime_end <= ?", Time.now.at_beginning_of_month + 1.months, Time.now.at_end_of_month + 1.months) }
end

view / events / index.html.erbに表示したいのは、今日発生しているすべてのイベントの表であり、次のようなことをしたいと思います。

<% @events.today.each do |event|  %>

.todayスコープに一致するすべてのイベントを表示します。

スコープをeventモデルに移動してみましたが無駄になりました。スコープをイベントモデルに移動する必要がありますか?これまでのところ、検索の結果、「スコープを使用してActiveRecordの複数のDateTime範囲内の結果を返す」と「 Rails3.0の複数のスコープ」にたどり着きましたが、実際には何も作成できません。

誰かが私を正しい方向に向けることができますか?イベントモデルに新しい関数を作成する必要がありますか?

4

2 に答える 2

3
class Event < ActiveRecord::Base
  has_many :occurences, :dependent => :destroy
  belongs_to :price
  belongs_to :venue
  validates_presence_of :venue

  scope :today, lambda {
    joins(:occurences).where("datetime_start <= ? AND datetime_end >= ?", Time.now.end_of_day, Time.now)
  }
end
于 2012-10-23T17:22:05.857 に答える
1

構文を次のように機能させたい場合:

@events.today

次に、スコープはEventモデル内にある必要があります。

よろしければ:

@event.occurences.today

その後、あなたは今大丈夫です、すなわち:

@events = Event.all
@events.each do |ev|
   ev.occurences.today.each do |oc|
   end
end
于 2012-10-23T17:27:55.667 に答える