named_scope не показывает правильные столбцы - PullRequest
1 голос
/ 21 сентября 2011

Обновление

Я пытаюсь выбрать определенные столбцы, использовать для них псевдонимы и использовать их в named_scope. Я хочу использовать псевдонимы, потому что позже я буду использовать это как идею, когда попытаюсь объединить множество таблиц на основе созданного мной SQL.

Редактировать : Я работаю в Rails 2.3.8 и Ruby 1.8.7


Вот мой именованный прицел ...

named_scope :prog_result,:select => "users.id AS 'user_id', users.username AS 'username', users.lastname AS 'lastname', users.firstname AS 'firstname', departments.name AS 'department', versions.number AS 'version'", 
                         :joins => {:department => :version}

И когда я пытаюсь вызвать его в консоли User.prog_result, получается следующее ...

[#<User username: "respondent1", lastname: "res", firstname: "pon">, #<User username: "2222", lastname: "Numero", firstname: "Dos">]

User.prog_result.find(2) 2 - это идентификатор пользователя "responsedent1", результат User.prog_result.inspect - это

"[#<User username: \"respondent1\", lastname: \"res\", firstname: \"pon\">, #<User username: \"2222\", lastname: \"Numero\", firstname: \"Dos\">]"

Может кто-нибудь сказать мне, что я делаю не так? ..

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Когда вы вызываете User.prog_result в консоли, вы действительно вызываете User.prog_result.inspect Консоль отображает результат, вызывая #inspect для объекта результата.

Если вместо этого вы позвоните в консоль User.prog_result.class, вы увидите, что это был ActiveRecord::NamedScope::Scope.

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

User.prog_result.first.department => first joined department.name
User.prog_result.last.version   => last joined version.number

И именованные области действия, и передача :joins, :conditions и :select устарели в Rails 3.1, поэтому вам, вероятно, не следует разрабатывать новый код с ними, если вы не находитесь на Rails 2.3.x. Вы хотите сделать что-то вроде этого:

User.joins(:department => :version).
select("users.id AS 'user_id', users.username AS 'username', users.lastname AS 'lastname', users.firstname AS 'firstname', departments.name AS 'department', versions.number AS 'version'")
1 голос
/ 21 сентября 2011

Я не совсем уверен в вашем вопросе, но я предполагаю, что вы смотрите на объект User, и rails возвращает массив.

Если это так, named_scope всегда будет возвращать массив (так же, как вы делаете User.find_all ())

, даже если есть только одна запись

Надеюсь, я правильно понял ваш вопрос ..

спасибо и всего наилучшего

Sameera

...