1

我有以下型号:

class User < ActiveRecord::Base
  has_many :permissions
  has_many :tasks, :through => :permissions

class Task < ActiveRecord::Base
  has_many :permissions
  has_many :users, :through => :permissions

class Permission < ActiveRecord::Base
  belongs_to :task
  belongs_to :user

我希望能够仅显示用户有权访问的任务(即,在表read中设置了标志)。我可以使用以下查询来完成此操作,但对我来说这似乎不是 Rails-y:truePermissions

@user = current_user
@tasks = @user.tasks.find_by_sql(["SELECT * FROM tasks INNER JOIN permissions ON tasks.id = permissions.task_id WHERE permissions.read = true AND permissions.user_id = ?", @user.id])

有人知道这样做的正确方法吗?

4

2 回答 2

1

在这里回答我自己的问题,Rails 实际上允许您对关联本身设置条件。因此,例如,在我的用户模型中,我将该has_many关联修改为:

has_many :tasks, :through => :permissions, :conditions => 'permissions.read = true'

挺整洁的。Trip 建议的解决方案也有效(但至少对于 MySQL,不应引用 'true')。我发誓我试过那个......!

于 2010-10-19T18:22:24.367 回答
0

抱歉,这是快速猜测。抱歉,如果这不正确。

@user.tasks.find(:all, :conditions => "permissions.read = 'true' ")
于 2010-10-19T17:24:23.770 回答