我試圖用相關記錄的屬性創建記錄列表。獲得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