как пройти модель рельсов для получения сложного результата (has_mas> has_many) - PullRequest
0 голосов
/ 01 февраля 2011

Может быть, это простая проблема, которую я не вижу, но она немного сложна для меня сейчас

Мне нужно знать, на какие проекты поставил пользователь.Я хочу сделать что-то вроде:

some_user.bets.projects

мои модели:

class User < ActiveRecord::Base
    has_many :bets
end
class Project < ActiveRecord::Base
    has_many :bets
end
class Bet < ActiveRecord::Base
    belongs_to :user
    belongs_to :project
end

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

В sql будет что-то вроде

select projects.name from users
                inner join bets
                           on bets.user_id = users.id
                inner join projects
                           on bets.project_id = projects.id
           where users.id = 1;

как заставить это работать?

1 Ответ

4 голосов
/ 01 февраля 2011

Обновите классы User и Project следующим образом:

class User < ActiveRecord::Base
  has_many :bets
  has_many :projects, :through => :bets
end

class Project < ActiveRecord::Base
  has_many :bets
  has_many :users, :through => :bets
end

Затем вы можете сделать это:

user = User.first        # Find a user
projects = user.projects # and return the projects that have bets
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...