2015-02-06 2 views
0

Мое приложение имеет концепцию «Пользователи, события и приглашения». Пользователь может быть приглашен на многие мероприятия, и на мероприятии может быть много приглашенных пользователей; эта связь имеет статус, прикрепленный к ней, что указывает, принял ли пользователь приглашение или нет.Использование модели для ассоциации приводит к ошибке PK

Я моделирование приглашения, используя модель приглашения для присоединения таблицы между событиями и пользователями, но я не могу на самом деле обновить таблицу соединения через модель приглашения, возложенную на него:

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 
+0

Я без проблем запускал этот точный код, я думаю, что что-то может быть неправильно с тем, как вы создаете таблицы. Можете ли вы опубликовать код или схему? – Jesper

+0

@Jesper интересно. Я обновил сообщение с кодом создания таблицы. Благодаря! –

ответ

2

У вас есть опечатка в коде создания таблицы:

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

я получаю ту же ошибку, как вы делаете, когда я ввожу эту опечатку в мой код.

0

Я никогда не использовал продолжение, но это, кажется, что он не знает, что является первичным ключом для модели пользователя или события.

Вы пытались сказать, какие колонки использовать? Например:

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

Изменение параметров запроса не помогает. –

Смежные вопросы