我一直在搜索互联网并尝试了很多不同的方法来解决这个问题,但我真的被卡住了。我对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;'。用户或笔记之一?“
任何人都能看到我错过的东西吗??
答案 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,它应该返回该用户的一系列注释。