【问题标题】:how to call method on query result in Rails如何在 Rails 中调用查询结果的方法
【发布时间】:2013-08-16 12:42:49
【问题描述】:

如何在 Rails 中调用查询结果的方法 我的项目控制器中有以下代码

def inprogress_report @projects = Project.all

@project_list = Project.find_by_sql("select p.id, p.name, (select sum(i.estimated_hours) from issues i where i.project_id = p.id) as estimate_hours,(select sum(t.hours ) from time_entries t where p.id = t.project_id ) as Spent_Hours,(select u.firstname from users u where u.id IN(select user_id from members m where m.project_id = p.id and m.id IN (select member_id from member_roles where role_id IN (select id from roles r where r.name = 'Project Coordinator'))) limit 1) as Coordinator,(select u.firstname from users u where u.id IN(select user_id from members m where m.project_id = p.id 和 m.id IN (select member_id from member_roles where role_id IN (select id from roles r where r.name = 'Project Manager'))) 限制 1) 作为项目 p where p.status 的经理IN ('16','14','15','17','18','19','20') group by p.id")

现在我想在@project_list 结果上进行搜索

所以我放了

@project_list = @project_list.search(params[:search]) 

在我的 project.rb 中有

def search(search)
  if search
    where('name LIKE ?', "%#{search}%")
  else
    find(:all)
  end
end

但给我错误未定义的搜索方法...

我可以使用 Active Record::Base.connection.select_all 进行上述查询吗?结果我想进一步排序是否可能请指导我

【问题讨论】:

  • search 未为 project_list 定义,它只会为您的模型定义。 find_by_sql 返回一个 array
  • 我可以使用 Active Record::Base.connection.select_all 进行上述查询吗?结果我想进一步排序是否可能请指导我

标签: ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

find_by_sql 返回一个普通数组,而不是结果集。如果要向其中添加其他条件,则必须在没有 find_by_sql 的情况下构建查询。

http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class

【讨论】:

    【解决方案2】:

    Maximilian Gaß 是对的,但由于重写 find_by_sql 方法调用可能需要一段时间,我将重写 search 方法调用以使用由 find_by_sql 方法调用返回的数组,如果结果数组是合理的。换句话说,而不是:

    @project_list = @project_list.search(params[:search]) 
    

    输入类似:

    @project_list.keep_if{ |p| /.*#{params[:search]}.*/.match p.name }
    

    【讨论】:

    • 你能提供确切的错误吗?这听起来像@project_list 是零。
    • NoMethodError (未定义方法keep_if' for #<Class:0xb6194450>): app/controllers/projects_controller.rb:90:in report'
    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多