사용자가 데이터베이스에서 프로젝트를 입력, 편집 및 검색 할 수있는 앱이 있습니다.Ruby on Rails : 부울 검색 - postgres
내 검색 기능에서 검색에 매개 변수를 추가하여 복잡한 검색을 수행 할 수 있습니다.
def self.like(text); "%#{text}%"; end
def self.search(search_archive, search_client, search_status, search_fullname)
# start with a scoped query, to apply more scopes on it afterwards
_projects = Project.scoped
# then, for each of the parameters, apply the scope only if present
if search_archive.present?
_projects = _projects.where ['archive LIKE ?', like(search_archive)]
end
if search_client.present?
_projects = _projects.where ['client LIKE ?', like(search_client)]
end
if search_status.present?
_projects = _projects.where ['status LIKE ?', like(search_status)]
end
if search_fullname.present?
_projects = _projects.where ['fullname LIKE ?', like(search_fullname)]
end
# now you have applied only the present scopes. return the result, and watch
# the query as it executes.
_projects
end
최근에는 프로젝트를 보관 처리하는 옵션이 추가되었습니다.이 옵션은 프로젝트 테이블에 부울로 저장됩니다.
나는 내가 시도한 방식대로 부울을 처리 할 수 있다고 생각하지 않기 때문에 내 검색 기능이 잘못되었다는 것을 알고있다.
PG::Error: ERROR: operator does not exist: boolean ~~ unknown
LINE 1: SELECT COUNT(*) FROM "projects" WHERE (archive LIKE '%{"{:c...
어떤 아이디어 : 여기
오류인가? 미리 감사드립니다.UPDATE :
: 여기PG::Error: ERROR: missing FROM-clause entry for table "archive"
LINE 1: SELECT COUNT(*) FROM "projects" WHERE "archive"."{:class=>"...
^
: SELECT COUNT(*) FROM "projects" WHERE "archive"."{:class=>""archive""}" = '1'
내 검색 작업입니다 :
아래의 제안에 변경
if search_archive.present?
_projects = _projects.where(:archive => search_archive)
end
나는이 오류 검색 VIEW의
추가 PART
<%= form_tag search_path, method: :get do %>
<% if current_user.try(:admin?) %>
Archive:
<%= check_box :archive, :class => "archive" %></H2>
<% end %>
<% if !current_user.try(:admin?) %>
<%= hidden_field :archive, :value => false %>
<% end %>
<div class="client">
Client :
<%= select(@projects, :client, Project.order("client").map{|p| [p.client]}.uniq, :prompt => "-Any-", :selected => params[:client]) %></br>
</div>
<div class="buttons">
<div id="search_button">
<%= submit_tag "Search", name: nil, :class => "button" %>
</div>
<% end %>
설명 * 내가 관리를 오전, 내가 선택하지 않은 아카이브 확인란을두면, 내가하지 않은 모든 프로젝트를보고 싶어
보관되었습니다. 내가 확인하면, 내가 검색 한 다른 매개 변수와 함께 포함 된 보관 된 파일 만보고 싶을뿐입니다.
일반 사용자의 경우 보관함 확인란을 볼 수 없어야하며 모든 검색은 문서 보관실에 허위 사실이있는 프로젝트에 있어야합니다.archive
부울이며, 당신이 진정한 나에 대한 거짓을 검색하려면, 그리고 search_archive
도 부울 경우
내 검색보기를 추가했습니다. 사용자가 admin인지 여부에 따라 true 또는 false를 검색해야합니다. – Jazz
@jazz : - 업데이트 된 답변 확인 – Salil
고맙습니다. 그러나 상자가 티켓이 아니라면 항상'archive'를 거짓으로 검색하기 위해 모든 검색이 필요합니다. 그래서 관리자 만이 아카이브 된 파일을 볼 수있는 이유는 없기 때문에 아무 검색도 보이지 않을 것입니다. 왜냐하면 모든 검색은 항상'archive'를 거짓으로 검색하기 때문입니다. – Jazz