Как деноминировать внешние ключи в rubyonrails? - PullRequest
1 голос
/ 29 октября 2019

Я объясняю свою проблему:

У меня есть 2 модели:

- User (id, firstname, lastname, deviceid, email, password);
- Message (id, fromuser, touser, description)

Я хочу использовать внешние ключи:

-: fromuser (Message) -> id (User)
-: touser (Message) -> id (User)

в моей модели:

USER
-> has_many :messages

MESSAGE
-> belongs_to :users

в моей миграции схемы:

create_table "messages", force: :cascade do |t|
t.string "description"
t.integer "fromuser"
t.integer "touser"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end

create_table "users", force: :cascade do |t|
t.string "firstname"
t.string "lastname"
t.string "deviceid"
t.string "email"
t.string "password"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end

Как могут работать оба внешних ключа? Как это объяснить в моем messages_controller.rb?

Приветствия.

1 Ответ

6 голосов
/ 29 октября 2019

Позволяет поменять имена на sender и recipient, что сделает это намного более понятным.

class User
  has_many :sent_messages,
     class_name: "Message",
     foreign_key: :sender_id
  has_many :recieved_messages,
     class_name: "Message",
     foreign_key: :recipient_id

  def conversation_with(other_user)
     Message.where(
       "(recipient_id = :a AND sender_id = :b) OR (recipient_id = :b AND sender_id = :a)", 
       a: self.id, b: other_user.id
     ).order(:created_at)
  end
end

class Message
  belongs_to :sender, class_name: 'User'
  belongs_to :recipient, class_name: 'User'
end

См .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...