0

私は、人々がゲーム セッションを組織するプロジェクトに取り組んでいます。(要約)モデルは次のとおりです。

class User < ActiveRecord::Base
  has_many :events, dependent: :destroy      #events organized by user
  has_many :reservations, dependent: :destroy
end

class Event < ActiveRecord::Base
  belongs_to :user
  has_many :reservations, dependent: :destroy
end

class Reservation < ActiveRecord::Base
  belongs_to :events
  belongs_to :users
end

このようにして、使用する@user.eventsと、予想どおり、ユーザーが主催するイベントのリストが取得されます。

しかし、 User が予約しているイベントのリストが必要でした ( のようなものを使用する@user.reserved_eventsため、これを User モデルに追加しました:

has_many :reserved_events, :class_name => 'Event',:through => reservations

これはすべてを壊し、私は不思議なものを得ました

undefined local variable or method `reservations' for #<Class:0x00000003681048>

編集

Christopher Manning のおかげで、私は に変更reservations:reservations、些細なエラーを排除しました。ただし、今@user.reserved_eventsoを使用しようとすると@user.reservations.count

Could not find the source association(s) :reserved_event or :reserved_events in model Reservation. Try 'has_many :reserved_events, :through => :reservations, :source => <name>'. Is it one of :events or :users?

要求に応じてもどこ:source => :usersにも行きません: を使用すると、

SQLite3::SQLException: no such column: reservations.users_id: SELECT COUNT(*) FROM "events" INNER JOIN "reservations" ON "events"."id" = "reservations"."users_id" WHERE "reservations"."user_id" = 1

を使用:source => :eventsすると、別の欠落している列でボークします

私の一時的な解決策は、直接 SQL を使用することです。

@reserved_events = Event.find_by_sql("select events.* from events,reservations where events.id=reservations.event_id AND reservations.user_id="+@user.id.to_s)

より良いアイデア?

4

2 に答える 2

0

これを試して:

class User < ActiveRecord::Base
  has_many :events, dependent: :destroy
  has_many :reservations, :through => :events
end

class Event < ActiveRecord::Base
  belongs_to :user
  has_many :reservations, dependent: :destroy
end

class Reservation < ActiveRecord::Base
  belongs_to :events
end

これにより、次のように言うことができます。

@user.reservations

イベントにはuser_idフィールドが必要です。予約にはevent_idフィールドが必要です。これでどのような問題が発生するか教えてください。

于 2012-06-04T01:27:12.313 に答える
0

行内reservationsに変更:reservations

has_many :reserved_events, :class_name => 'Event',:through => reservations

未定義のローカル変数またはメソッド エラーを修正します。

于 2012-06-03T22:16:29.933 に答える