我试图用相关记录的属性创建记录列表。获得Task
goal
属性继承\更换Power
- goal
属性如何从关联中访问连接表属性(has_many:through)
如果我们有:
@tasks = user.tasks
<%= render @tasks %>
一切都很好,我们可以只使用
<%= task.goal %>
在部分和所有的工作,但如果我们有user.super_tasks
如何在部分中覆盖目标?
,想到的第一件事是在_task.htm.erbl
<%= goal = if @super_tasks then task.powers.find_by(user_id: current_user).goal else task.goal end %>
,使这是一种使,但是,这个确定的,如果你有3条记录,有15就会使15请求分贝每次查找连接表。
刚刚添加的表,使之更加明确:
class User < ActiveRecord::Base
has_many :tasks
has_many :powers
has_many :super_tasks , through: :powers, source: :task
end
class Task < ActiveRecord::Base
belongs_to :user
has_many :powers
end
class Power < ActiveRecord::Base
belongs_to :user
belongs_to :tasks
end
但是,如果用户有权力,他们有更多的责任,它不是第一次,我被困在这个问题,肯定还有其他的方式来做这个工作时不需要每次调用db,因为它可悲的是常见的问题。
参见[活动记录查询接口 - 连接表](http://guides.rubyonrails.org/active_record_querying.html#joining-tables)和[活动记录查询接口 - 急切加载关联](http://guides.rubyonrails.org/active_record_querying .html#eager-loading-associations) –
即使您“加入”或“急切加载”,您仍需要遍历所有记录,例如: <%task.powers.each do | pw | %> <%如果pw.user_id == current_user.id%> <%= pw.goal%> <% end %> <% end %> 它会工作,但这不是干净的方式,我找了。 – GEkk