RoR:访问:通过属性

时间:2016-03-25 02:00:40

标签: ruby-on-rails ruby-on-rails-4

我是rails的新手并在此应用中工作,用户可以在其中创建许多事件。可以邀请许多用户参加这些活动,因此我有以下模型:

用户:

class User < ActiveRecord::Base
  ...
  has_many :events, dependent: :destroy
end

事件:

class Event < ActiveRecord::Base
  belongs_to :user
  has_many   :event_guest
  has_many   :guests, :through => :event_guest, :source => :user
end

Event_Guest:

class EventGuest < ActiveRecord::Base
  belongs_to :user
  belongs_to :event
end

我正在寻找的是能够访问(和添加)访客用户参加活动,我已经尝试了所有可能的变化&#34; Event.find(1)。来宾&#34;,只是为了得到以下错误:

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: event_guests.event_id: SELECT "users".* FROM "users" INNER JOIN "event_guests" ON "users"."id" = "event_guests"."user_id" WHERE "event_guests"."event_id" = ? AND "users"."event_id" = 1

我的event_guest迁移如下:

create_table :event_guest do |t|
     t.belongs_to :user, index: true
     t.belongs_to :event, index: true
end

2 个答案:

答案 0 :(得分:1)

与@Dharam一样,您的命名约定不正确。您需要重命名event_guest表。

$ rails g migration rename_event_guest_table

然后迁移看起来像这样:

def change
  rename_table :event_guest, :event_guests
end

然后,您需要将event.rb模型更新为

class Event < ActiveRecord::Base
  belongs_to :user
  has_many   :event_guests
  has_many   :guests, :through => :event_guests, class_name: 'User'
end

您的user.rb型号:

class User < ActiveRecord::Base
  ...
  has_many :event_guests, dependent: :destroy
  has_many :events, through: :event_guests
end

将依赖的destroy从事件关联和event_guests关系移开。你不想因为一位客人没有去摧毁这个事件......

答案 1 :(得分:0)

尝试将self.table_name =“event_guest”添加到EventGuest中,因为这是您在迁移中所拥有的,这与模型名称中“event_guests”的rails期望相反。