如何在Rails中调用查询结果的方法

时间:2013-08-16 12:42:49

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

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

def inprogress_report @projects = Project.all

@project_list = Project.find_by_sql(“选择p.id,p.name,(从问题i中选择sum(i.estimated_hours)i.project_id = p.id)as estimated_hours,(select sum(t.hours) )从time_entries t,其中p.id = t.project_id)作为Spent_Hours,(从用户u中选择u.firstname,其中u.id IN(从成员m中选择user_id,其中m.project_id = p.id和m.id IN(选择) member_roles中的member_id,其中role_id IN(从角色r中选择id,其中r.name ='项目协调员')))限制1)作为协调员,(从用户u中选择u.firstname,其中u.id IN(从成员m中选择user_id) m.project_id = p.id和m.id IN(从member_roles中选择member_id,其中role_id IN(从角色r中选择id,其中r.name ='项目经理')))限制1)作为项目p的管理员,其中p.status IN('16','14','15','17','18','19','20')分组由p.id“)

现在我想在@project_list结果

上制作serch

所以我已经把

@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进行上述查询,结果我想进一步排序是可能的plz指导我

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

如下:

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