我是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
答案 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期望相反。