使用关联模型不会导致PK错误

时间:2015-02-06 00:11:31

标签: ruby sqlite sequel

我的应用程序具有用户,事件和邀请的概念。可以邀请用户参加许多活动,并且活动可以有许多受邀用户;此关系具有附加到其的状态,其指示用户是否已接受邀请。

我正在使用邀请模型为事件和用户之间的连接表建模邀请,但我无法通过分配给它的邀请模型实际更新连接表:

class Event < Sequel::Model
  many_to_many :users, :join_table => :invitations
  one_to_many :invitations
end

class Invitation < Sequel::Model
  many_to_one :user
  many_to_one :event
end

class User < Sequel::Model
  many_to_many :events, :join_table => :invitations
  one_to_many :invitations

  def invite (user, event)
    user.add_invitation(event: event)
  end

  def decline(event)
    i = Invitation.where(user: self, event: event).first
    i.update(status: "declined")
  end
end

user_one = User.create(name: "foo")
user_two = User.create(name: "bar")
event = Event.create(title: "fete")

user_one.add_event(event)
user_one.invite(user_two, event)

user_two.invitations
# [#<Invitation @values={:id=>nil, :status=>"pending", :event_id=>1, :user_id=>2}>]
# id is nil, which probably leads to the error below?

user_two.decline(event)
# `pk': No primary key is associated with this model (Sequel::Error)`

编辑:我的表创建代码:

DB.create_table :users do
  primary_key :id
  string :name

  foreign_key :event_id
end

DB.create_table :events do
  primary_key :id
  string :title

  foreign_key :owner_id
  foreign_key :user_id
end

DB.create_table :invitations do
  primay_key :id
  string :status, :default => "pending"
  foreign_key :event_id, :events
  foreign_key :user_id, :users
end

2 个答案:

答案 0 :(得分:2)

你的表创建代码中有一个拼写错误:

DB.create_table :invitations do
  primay_key :id # <= should be primary_key

当我将这个拼写错误引入我的代码时,我得到了同样的错误。

答案 1 :(得分:0)

我从未使用续集,但它似乎不知道用户模型或事件的主键是什么。

您是否试图准确说出要使用哪些列?例如:

Invitation.where(user_id: self.id, event_id: event.id)