#sql #ruby-on-rails #ruby-on-rails-3 #activerecord
#sql #ruby-on-rails #ruby-on-rails-3 #activerecord
Вопрос:
У меня есть следующее, и я пытаюсь выяснить, как выбрать информацию о пользователе (sql в конце вопроса).
# only global_id and list_id
class GlobalList < ActiveRecord::Base
set_table_name :globals_lists
belongs_to :list
end
# user_id
class List < ActiveRecord::Base
has_many :global_lists
belongs_to :user
end
# email
class User < ActiveRecord::Base
has_many :lists
end
Как бы я выбрал электронные письма из списка пользователей, предполагая, что у меня есть global_id (т.Е. При условии, что global_id равен 256,
select u.* from users u, lists l, globals_lists gl where gl.global_id=256 and gl.list_id=l.id and l.user_id=u.id)
Ответ №1:
Попробуйте это:
User.includes({:lists => :global_lists}).where(['global_lists.global_id = ?', 256])
Это вернет User
объекты, которые, похоже, являются тем, что вы ищете в своем запросе. Затем вы можете получить их электронную почту из их .email
атрибута, в цикле или как вам это нужно.
Комментарии:
1. есть ли хороший источник / учебник для показа этих типов запросов — у меня есть тонна из них, которые мне нужно перенести из sql. thx
2. Да, вы всегда можете
Object.find_by_sql(my_sql_string)
выбрать, если ваш SQL очень специфичен.3. согласен — я делал это в нескольких местах. Вероятно, потребуется провести рефакторинг при более позднем указании