2016-02-13 3 views
1

У меня есть три модели, а именно: Уведомления, устройства и пользователи. Уведомление имеет registration_ids, который отображается на поле приборов token. У устройств есть поле user_id, которое отображается в поле модели пользователя id.Создать ассоциацию Rails с разными именами столбцов

Как создать ассоциацию has_many_through или has_and_belongs_to_many из модели Notification, чтобы извлечь пользователя, соответствующего этому уведомлению.

Кроме того, я создал эту ассоциацию в Notifications класса belongs_to :device, :primary_key => 'registration_ids', :foreign_key => 'token' и этот в классе устройств has_many :notifications, :primary_key => 'token', :foreign_key => 'registration_ids'

класс устройства способен распознавать класс уведомления, в то время как класс уведомления не в состоянии распознать класс устройств

После кусок моего кода из файла notification.rb

class Notification < Rpush::Gcm::Notification 
    self.inheritance_column = nil 
    belongs_to :device, :foreign_key => 'registration_ids', :primary_key => 'token' 
    delegate :user, to: :device #-> notification.user.name 
end 

ответ

0
#app/models/notification.rb 
class Notification < ActiveRecord::Base 
    belongs_to :device, foreign_key: :registration_id, primary_key: :token 
    delegate :user, to: :device #-> notification.user.name 
end 

#app/models/device.rb 
class Device < ActiveRecord::Base 
    belongs_to :user 
    has_many :notifications, foreign_key: :registration_id, primary_key: :token 
end 

#app/models/user.rb 
class User < ActiveRecord::Base 
    has_many :devices 
    has_many :notifications, through: :devices 
end 

Выше было то, как я мог бы это понять.

Вы сможете по телефону:

@notification = Notification.find params[:id] 

@notification.device.user.name #-> "name" of associated "user" model 
@notification.user.name  #-> delegate to "user" model directly 

Метод delegate трюк, чтобы обойти law of demeter вопрос (вызов объекта, несколько уровней «далеко» от родителей).

+0

получает следующее сообщение об ошибке '2.2.1:.. 071> Notification.last.device Уведомление нагрузки (0.4ms) ВЫБОР "rpush_notifications" * FROM "rpush_notifications" ORDER BY "rpush_notifications" "Идентификатор" по убыванию ПРЕДЕЛ 1 TypeError : невозможно передать массив в строку ' – vipin8169

+0

Интересно. У вас есть какой-то контекст? Я не знаю, как вы добираетесь до этого результата. Можете ли вы показать мне журнал «console» для запроса как в виде скриншота? –

+0

вот скриншоты с консоли - http://postimg.org/image/r9wrr3vhx/ – vipin8169

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