我尝试使用相关记录的属性创建记录列表。获取Task
goal
属性继承\ replace 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
但是如果用户有权力他们有更多的责任,这不是我第一次坚持这个问题,肯定有其他方法可以在不调用db的情况下完成这项工作,因为这是一个可悲的常见问题。
答案 0 :(得分:0)
好吧也许这不是最好的解决方案,但它可以解决问题:
tasks = user.tasks.order(:id)
power_tasks = user.powers.order(:task_id)
tasks.each_with_index do |task,i|
task.goal = power_tasks[i].goal
end
如果此代码是弱点,如果我们说没有task_id
来订购\调整power
或者数字power_tasks
与任务不匹配。
但就我而言,它完美无缺。
如果您想添加其他参数,这些参数在普通Task
上不存在,但存在于Power
表中,并且您想将其添加到tasks
,那么在模型中我们可以:
class Task < ActiveRecord::Base
attr_accessor :cookies
task.cookies = power_tasks[i].cookies