【发布时间】:2017-06-10 23:23:58
【问题描述】:
我正在尝试使用关联记录的属性创建记录列表。获取Taskgoal属性继承\替换Power-goal属性
如果我们有:
@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 条它每次都会向 db 发出 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
但是如果用户有权力他们有更多的责任,这不是我第一次遇到这个问题,当然还有其他方法可以使这项工作无需每次都调用数据库,因为这是可悲的常见问题。
【问题讨论】:
-
即使你
join或Eager-loading你也需要遍历所有的记录,例如: 它会起作用,但这不是我寻找的干净方式。跨度>
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord has-many-through