2010-10-19 6 views
1

У меня есть следующие модели:Как я могу найти в Rails с условиями, установленными в таблице соединений: через объединение?

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-у меня:

@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]) 

Каждый знает правильный способ сделать это?

ответ

1

Отвечая на мой собственный вопрос здесь, Rails на самом деле позволяет вам устанавливать условия для самой ассоциации. Так, например, в моей модели пользователя, я бы изменить, что has_many ассоциация быть:

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

Довольно аккуратный. Решение, предложенное Trip, также работает (за исключением того, что для MySQL, по крайней мере, «true» не следует указывать). Клянусь, я попробовал этот ...!

0

Извините, это быстро догадаться. извините, если это не так.

@user.tasks.find(:all, :conditions => "permissions.read = 'true' ") 

 Смежные вопросы

  • Нет связанных вопросов^_^