【问题标题】:named_scope does not show correct columnsnamed_scope 不显示正确的列
【发布时间】:2011-09-21 06:05:45
【问题描述】:

更新

我正在尝试做的是选择特定的列并在它们上使用别名,然后在 named_scope 中使用它。我想使用别名,因为稍后我将根据我创建的 SQL 尝试连接许多表时将其用作一个想法。

编辑: 我在 Rails 2.3.8 和 Ruby 1.8.7 中运行


这是我的named_scope...

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是用户“respondent1”的id,User.prog_result.inspect的结果是这样的

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

谁能告诉我我做错了什么?..

【问题讨论】:

    标签: ruby-on-rails named-scope


    【解决方案1】:

    当您在控制台中调用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
    

    在 Rails 3.1 中不推荐使用命名范围和传递 :joins:conditions:select,因此除非您使用的是 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'")
    

    【讨论】:

    • 抱歉!我正在运行 Rails 2.3.8 我编辑了我的问题。您对User.prog_result.class 是正确的,它确实在控制台中返回ActiveRecord::NamedScope::Scope,并且还关于在其中戳。但是当我尝试获取部门时,它返回nil idk 为什么,但是使用我以前的代码,我使用了User.find_by_sql() 我得到了他们的部门..
    【解决方案2】:

    我不确定你的问题,但我假设你正在查看一个用户对象并且 rails 返回一个数组。

    如果是这样,named_scope 将始终返回一个数组(就像您执行 User.find_all() 一样)

    即使只有一条记录

    希望我的问题是正确的..

    感谢和问候

    同人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多