【发布时间】:2011-06-07 11:48:39
【问题描述】:
我正在尝试实现 Ryan Bates 的可排序表列代码 (Railscast #228),但我希望能够对关联的列进行排序。特别是,我有以下模型和关联:
class Project < ActiveRecord::Base
belongs_to :program_manager, :class_name => "User"
class User < ActiveRecord::Base
has_many :program_manager_projects, :class_name => "Project", :foreign_key => "program_manager_id"
项目模型和用户模型之间的关联由“program_manager_id”外键介导,用户使用集合选择下拉菜单在新/编辑视图中设置该外键。这是project.rb顶部的部分注释:
# Table name: projects
# program_manager_id :integer
我希望能够按项目经理的姓名(即 project.program_manager.name)对索引视图中的项目列表进行排序。
理想情况下,我能够以某种方式将 :order 指向这个名称,也许在我的 ProjectsController 的 index 方法中使用类似这样的东西:
@projects = Project.find(:all, :order => project.program_manager.name)
但这显然行不通(更不用说 Ryan 的例程通过对要排序的模型中的表名的特定引用来实现这一点。)
我遇到过一些使用 named_scope 的令人生畏的方法,例如:
named_scope :most_active, :select => "questions.*", :joins => "left join comments as comments_for_count on comments_for_count.question.id = questions.id", :group => "questions.id", :order => "count(questions.id) desc"
但鉴于我缺乏 MySQL 专业知识,这对我来说相当难以理解。
谁能帮助我针对我的具体情况概括上面的 named_scope 示例,或者指出一个更直接的策略?
非常感谢,
院长
【问题讨论】:
-
以ORM为借口不学习SQL是个坏主意。阅读连接。这似乎是一个很好的高级概述:codinghorror.com/blog/2007/10/…
-
要点...感谢有用的文章链接!我会听取你的建议,不要再拖延深入研究 SQL 了。
标签: mysql ruby-on-rails sorting associations named-scope