如何在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指导我
答案 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 }