Запрос Ruby on rails с оператором соединения и условия - PullRequest
0 голосов
/ 01 июля 2011

Мне нужно запросить объединение таблиц без использования первичного ключа (id).

class User < ActiveRecord::Base
  has_one :participant
end

class Participant < ActiveRecord::Base
  belongs_to :user
end

У пользователя есть 'id' и 'name'.Участник имеет 'user_id', который является User.id

Я пытаюсь найти Participant.id, запрашивая User.name

, что я пробовал,

participant_id = Participant.all :joins => :users, :conditions => {:name => "Susie"}

Ответы [ 2 ]

3 голосов
/ 01 июля 2011

Если вы просто ищете идентификатор участника конкретного пользователя, вы можете просто набрать:

User.find_by_name("Susie").participant.id

Так как ваш пользователь имеет отношение has_one к Участнику (которое принадлежит ему - так что в основном одно-в-один) вы можете просто пойти позвонить участнику на пользователя.ActiveRecord позаботится о магии соединения для вас

0 голосов
/ 01 июля 2011

Попробуйте следующее:

class User < ActiveRecord::Base
  has_one :participant
end

class Participant < ActiveRecord::Base
  belongs_to :user

  scope :foo, lambda {|name|
    joins(:users).
    where("name = ?", name)
  }
end

Если вы принимаете пользовательский ввод, возможно, вы захотите исправить объединения, поэтому он использует sanitize_sql_array.См. здесь также для некоторого качества запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...