这似乎是一个简单的问题,但这对我来说有点困惑。我想找到一个好方法来处理这个问题。 我有5个型号。
工作
class Job < ActiveRecord::Base
has_many :job_entries_jobs
has_many :job_entries, through: :job_entries_jobs
end
JobEntry
class JobEntry < ActiveRecord::Base
has_many :attachments
has_many :job_entries_jobs
has_many :pinned_entries, through: :job_entries_jobs
has_many :jobs, through: :job_entries_jobs
belongs_to :user, class_name: 'User', foreign_key: 'user_id'
end
JobEntriesJob
class JobEntriesJob < ActiveRecord::Base
self.table_name = 'job_entries_jobs'
has_many :pinned_entries
belongs_to :job_entry
belongs_to :job, touch: true
end
PinnedEntry
class PinnedEntry < ActiveRecord::Base
self.table_name = "pinned_entries"
belongs_to :job_entries_job
has_and_belongs_to_many :users
end
用户
class User < ActiveRecord::Base
has_many :job_entries
has_many :pinned_entries
end
我是否可以通过job_id
user_id
方式request
associations
和rails
来获取pinned_entries(job_id和user_id来自SQL
参数)code
使用attachment
获取pinned_entries。如果是,我应该在哪里放置class Attachment < ActiveRecord::Base
self.table_name = 'attachments'
belongs_to :job_entry, :class_name => 'JobEntry', :foreign_key => 'job_entry_id'
end
?
如果我有一个include
型号
attachment
我想要JobEntry
content
(链接和文件名)和{
"listPinnedEntries": [
{
"id": 1
"user_id":
"text": "content of entry",
"user": {
"id":
"username": "jamesnguyen"
},
"attachments": [
{
"id":
"job_entry_id":
"comment": "file name",
"file": {
"url": "link here"
}
},
{
"id":
"job_entry_id":
"comment": "file name",
"file": {
"url": "link here"
}
}
]
}]
}
(&&
)?
这是应该
success
感谢您的帮助
答案 0 :(得分:0)
给定job_id
和user_id
:
user = User.find(user_id)
pinned_entries = user.pinned_entries.includes(:job_entries_job).where(job_entries_jobs: {job_id: job_id})
更新(关于附件的第二个问题):
由于您正在生成值的哈希值,因此修改您的PinnedEntry模型(或者甚至是@Robin回答的Job模型和用户模型)比执行脏循环更容易:
class PinnedEntry < ActiveRecord::Base
self.table_name = "pinned_entries"
belongs_to :job_entries_job
belongs_to :job_entry, through: :job_entries_job
has_many :attachments, through: :job_entry
has_and_belongs_to_many :users
end
然后,继续我上面的第一个答案:
pinned_entries.as_json(
only: [:id, :user_id, :text],
include: [
user: {
only: [:id, :username]
},
attachments: {
only: [:id, :job_entry_id, :comment]
}
]
)
这将返回与您想要的值相同的哈希值。注意:我没有在您的附件模型中添加file: url
,没有belongs_to :file
或某些内容可以帮助我确定附件模型与file
和{{1}的关系}。如果它不是属性,那么我认为您必须手动将这些添加到生成的哈希。
答案 1 :(得分:0)
向模型Job
和User
添加额外的has_many
并通过{{3}将其与PinnedEntry
相关联可能是一个好主意。 }}
您的Job
模型将更改为:
class Job < ActiveRecord::Base
has_many :job_entries_jobs
has_many :job_entries, through: :job_entries_jobs
has_many :pinned_entries: through: :job_entries
end
然后您可以像往常一样在.pinned_entries
记录中使用Job
。因此,您更改了User
模型。