1

我一直在搜索互聯網,並嘗試了很多不同的方法來解決這個問題,但我真的被卡住了。我相當新的軌道,所以我可能錯過了明顯的東西!Rails - 多態has_many:通過關聯 - '找不到模型中的源關聯'錯誤

我的問題是與涉及4個車型多態關聯:

(1)用戶,(2)審批,(3)收件人,(4)注意

用戶具有許多批准者,並具有許多收件人。用戶還可以爲審批者和收件人留下備註。註釋與審批者和收件人之間具有多態關聯:值得注意。我的模型如下所示:

Note.rb

class Note < ApplicationRecord 
    belongs_to :user 
    belongs_to :notable, polymorphic: true 
end 

Approver.rb

class Approver < ApplicationRecord 
    belongs_to :user 
    has_many :notes, as: :notable 
end 

Recipient.rb

class Recipient < ApplicationRecord 
    belongs_to :user 
    has_many :notes, as: :notable 
end 

User.rb

class User < ApplicationRecord 
    has_many :approvers, dependent: :destroy 
    has_many :recipients, dependent: :destroy 

    # This is the bit that I think is the problem: 
    has_many :notes, through: :approvers, source: :notable, source_type: "Note" 
    has_many :notes, through: :recipients, source: :notable, source_type: "Note" 
end 

基本上我希望能夠做

User.find(1).notes (...etc) 

並顯示所有的音符從兩個審批和收件人的用戶。

例如,在批准者視圖中,我可以執行@ approver.notes.each並正確地遍歷它們。

我得到的錯誤信息是:「無法在模型收件人中找到源關聯:note_owner。嘗試'has_many:notes,:through =>:recipients,:source =>'。用戶或筆記之一?「

任何人都可以看到我失蹤!?

回答

0

爲了按照您提到的方式獲取用戶筆記,您必須爲該用戶添加一個外鍵。例如,

當顧問添加註釋時,該註釋將保存顧問ID和註釋本身,但目前沒有提及從顧問那裏接收註釋的用戶。如果添加到用戶標識引用的筆記架構,則可以提取特定用戶的所有筆記。

EX。

注架構:

user_id: references (the user the note is for) 
writer_id: references (the user that writes the note) 
note: text (your actual note) 

可以比建立一個音符,就象這樣:

current_user.create_note(params[:user], params[:note]) # pass the user as a reference 

def create_note(user, note) 
    Note.create(user_id: user.id, 
       write_id: current_user.id 
       note: note) 
end 

一旦創建這樣的用戶,你可以在任何用戶撥打:user.notes它應該返回該用戶的一系列註釋。

相關問題