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フラグがテーブルで設定さtrueれている)。Permissions私は次のクエリでこれを達成できますが、私にはあまりRails-yのようには見えません:

@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 に答える