使用关联模型不会导致 PK 错误
Using a model for an association results in no PK error
我的应用程序具有用户、事件和邀请的概念。一个用户可以被邀请参加多个活动,一个活动可以有多个受邀用户;这种关系有一个附加的状态,表明用户是否接受了邀请。
我通过使用邀请模型为事件和用户之间的加入 table 建模邀请,但我无法通过分配给它的邀请模型实际更新加入 table :
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)`
编辑:我的 table 创建代码:
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
我从未使用过sequel,但它似乎不知道用户模型或事件的主键是什么。
您是否尝试过准确说明要使用哪些列?例如:
Invitation.where(user_id: self.id, event_id: event.id)
您的 table 创建代码中有错字:
DB.create_table :invitations do
primay_key :id # <= should be primary_key
当我在我的代码中引入这个拼写错误时,我遇到了和你一样的错误。
我的应用程序具有用户、事件和邀请的概念。一个用户可以被邀请参加多个活动,一个活动可以有多个受邀用户;这种关系有一个附加的状态,表明用户是否接受了邀请。
我通过使用邀请模型为事件和用户之间的加入 table 建模邀请,但我无法通过分配给它的邀请模型实际更新加入 table :
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)`
编辑:我的 table 创建代码:
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
我从未使用过sequel,但它似乎不知道用户模型或事件的主键是什么。
您是否尝试过准确说明要使用哪些列?例如:
Invitation.where(user_id: self.id, event_id: event.id)
您的 table 创建代码中有错字:
DB.create_table :invitations do
primay_key :id # <= should be primary_key
当我在我的代码中引入这个拼写错误时,我遇到了和你一样的错误。