Rails - Polymorphic has_many:通过关联 - '无法在模型中找到源关联'错误

时间:2017-01-07 16:19:59

标签: ruby-on-rails ruby associations has-many-through polymorphic-associations

我一直在搜索互联网并尝试了很多不同的方法来解决这个问题,但我真的被卡住了。我对rails非常陌生,所以我可能错过了一些明显的东西!

我遇到的问题是涉及4个模型的多态关联:

(1)用户,(2)审批人,(3)收件人,(4)注意

用户拥有许多审批者并且拥有许多收件人。用户还可以为审批者和收件人留下备注。注释与批准者和收件人具有多态关联:值得注意。我的模型如下:

Note.rb

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

Approver.rb

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

Recipient.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.rb

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

基本上我希望能够做到

def run_job_subtype(self):
    print os
    if os.path.exists(self.abs_export_dir):
        return "incr"
    else:
        return "full"

并显示来自审批者和收件人的该用户的所有注释。

例如,在审批者视图中,我可以执行@ approver.notes.each并对其进行详细迭代。

我收到的错误消息是:“无法在模型收件人中找到源关联:note_owner。尝试'has_many:notes,:through =&gt;:recipients,:source =&gt;'。用户或笔记之一?“

任何人都能看到我错过的东西吗??

1 个答案:

答案 0 :(得分:0)

为了按照您提到的方式获取用户注释,您必须为该用户添加外键。例如,

当顾问添加备注时,该备注会保存顾问ID和备注本身,但目前没有提及接收顾问备注的用户。如果添加到用户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,它应该返回该用户的一系列注释。