0

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 Estimated_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 and m.id IN ( member_roles から member_id を選択 where role_id IN (役割 r から ID を選択 r.name = 'Project Manager') )) limit 1) as Manager from projects p where p.status IN (' 16'、'14'、'15'、'17','18','19','20') 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 を使用できますか。その結果、さらに並べ替えが必要な場合は、plz をガイドしてください

4

2 に答える 2

0

find_by_sql は、結果セットではなく、単純な配列を返します。追加の条件を追加する場合は、find_by_sql を使用せずにクエリを作成する必要があります。

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

于 2013-08-16T12:45:43.837 に答える
0

find_by_sqlMaximilian Gaß の言うとおりですが、メソッド呼び出しを書き直すには時間がかかる可能性があるため、結果の配列のサイズが妥当であれば、メソッド呼び出しsearchによって返される配列を使用するようにメソッド呼び出しを書き直します。find_by_sqlつまり、代わりに:

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

次のようなものを入れてください:

@project_list.keep_if{ |p| /.*#{params[:search]}.*/.match p.name }
于 2013-08-17T11:17:10.013 に答える