How to stop all records from being returned

Trying various things here to eliminate this problem. In my dyanmic search , if no search criteria is selected then all records are returned. It’s not what I want. By the way this is an observe_form. Help is greatly appreciated.

Here is the controller -

def list
category_id = params[:category_id]
state_id = params[:state_id]
term_id = params[:term_id]
city = params[:city]
title = params[:title]

    pq = Position.query # I'm using the plugin CriteriaQuery
    pq.category_id_in(params[:category_id]) unless(params[:category_id]|| "").empty?                    
    pq.state_id_in(params[:state_id]) unless(params[:state_id]|| "").empty?
    pq.term_id_in(params[:term_id]) unless(params[:term_id]|| "").empty?
    pq.city_in(params[:city].split(",")) unless(params[:city]|| "").empty?
    pq.title_in(params[:title].split(",")) unless(params[:title]|| "").empty?
    pp pq
   
    @positions = pq.find
    render :partial => "positions_list", :layout => false

 end

end

Here is the observe_form:# in the possibility that I can somehow enforce it here to not return any records in the event nothing is selected

                                 # I'm also showing my partial down below
Category <%= options_from_collection_for_select @categories, :id, :name, :prompt => true %> State <%= options_from_collection_for_select @states, :id, :name %> Terms <%= options_from_collection_for_select @terms, :id, :name %> Title City

<%= image_tag("roller.gif", :align => 'center',
           :border => 0,
           :id => "roller",
           :style => "display: none;") %>

<%= observe_form “asearch”,
:frequency => 0.5,
:update => ‘table’,
:before => “Element.show(‘roller’)”,
:success => “Element.hide(‘roller’)”,
:url => ‘list’ %>

Partial:
<% if @positions == nil %>

<%="Enter search criteria"%>

<% elsif @positions.size == 0 %>

<%="No jobs found using current search criteria"%>

<% else %>
<td>Category</td>
<td>Location</td>
<td>Terms</td>
<% @positions.each do |p| %> ">
  <td style="white-space: nowrap"><%= p.title %></td>
  <td style="white-space: nowrap"><%= [p.category.name](http://p.category.name) %></td>

  <td style="white-space: nowrap"><%= p.city %>-<%= [p.state.name](http://p.state.name) %></td>
  <td style="white-space: nowrap"><%= [

p.term.name](http://p.term.name) %>


<% end %>
Title
<% end %>

Hi --

Trying various things here to eliminate this problem. In my dyanmic search ,
if no search criteria is selected then all records are returned. It's not
what I want. By the way this is an observe_form. Help is greatly
appreciated.

Here is the controller -

def list
       category_id = params[:category_id]
       state_id = params[:state_id]
       term_id = params[:term_id]
       city = params[:city]
       title = params[:title]

It doesn't look like you ever use those assignments. Are they
necessary?

       pq = Position.query # I'm using the plugin CriteriaQuery

I'm afraid I'm not familiar with it. However...

       pq.category_id_in(params[:category_id])
unless(params[:category_id]|| "").empty?

If you think it might be nil or "", you can use the blank? method.

       pq.state_id_in(params[:state_id]) unless(params[:state_id]||
"").empty?
       pq.term_id_in(params[:term_id]) unless(params[:term_id]|| "").empty?

       pq.city_in(params[:city].split(",")) unless(params[:city]||
"").empty?
       pq.title_in(params[:title].split(",")) unless(params[:title]||
"").empty?
       pp pq

What does this show you?

David

Hi –

Trying various things here to eliminate this problem. In my dyanmic search ,
if no search criteria is selected then all records are returned. It’s not

what I want. By the way this is an observe_form. Help is greatly
appreciated.

Here is the controller -

def list
category_id = params[:category_id]
state_id = params[:state_id]

   term_id = params[:term_id]
   city = params[:city]
   title = params[:title]

It doesn’t look like you ever use those assignments. Are they
necessary?

No they do not get used, so no they are not necessary. However this is something I haven’t quite figured out yet regarding the plugin’s behaviour. Using regular AR syntax and find commands, they will recognize those assignment. For some reason I am finding CQ does not.

   pq = Position.query # I'm using the plugin CriteriaQuery

I’m afraid I’m not familiar with it. However…

   pq.category_id_in(params[:category_id])

unless(params[:category_id]|| “”).empty?

If you think it might be nil or “”, you can use the blank? method.

I have tried blank? with no success. Down for futher explanation.

pq.state_id_in(params[:state_id]) unless(params[:state_id]||

“”).empty?
pq.term_id_in(params[:term_id]) unless(params[:term_id]|| “”).empty?

   pq.city_in(params[:city].split(",")) unless(params[:city]||

“”).empty?
pq.title_in(params[:title].split(",")) unless(params[:title]||
“”).empty?
pp pq

What does this show you?

This is the only way I could find to allow fields that were nil (user did not make selection) to be evaluated as “”.
A fake out in other words.

Stuart

Adding something at the bottom:

Hi –

Trying various things here to eliminate this problem. In my dyanmic search ,
if no search criteria is selected then all records are returned. It’s not

what I want. By the way this is an observe_form. Help is greatly
appreciated.

Here is the controller -

def list
category_id = params[:category_id]
state_id = params[:state_id]

   term_id = params[:term_id]
   city = params[:city]
   title = params[:title]

It doesn’t look like you ever use those assignments. Are they
necessary?

No they do not get used, so no they are not necessary. However this is something I haven’t quite figured out yet regarding the plugin’s behaviour. Using regular AR syntax and find commands, they will recognize those assignment. For some reason I am finding CQ does not.

   pq = Position.query # I'm using the plugin CriteriaQuery

I’m afraid I’m not familiar with it. However…

   pq.category_id_in(params[:category_id])

unless(params[:category_id]|| “”).empty?

If you think it might be nil or “”, you can use the blank? method.

I have tried blank? with no success. Down for futher explanation.

pq.state_id_in(params[:state_id]) unless(params[:state_id]||

“”).empty?
pq.term_id_in(params[:term_id]) unless(params[:term_id]|| “”).empty?

   pq.city_in(params[:city].split(",")) unless(params[:city]||

“”).empty?
pq.title_in(params[:title].split(",")) unless(params[:title]||
“”).empty?
pp pq

What does this show you?

This is the only way I could find to allow fields that were nil (user did not make selection) to be evaluated as “”.
A fake out in other words.

Stuart

David

Using PP , if for example 2 fields are selected:
#<Criteria::Query:0xb5487b8
@join_aliases={“positions”=>“positions”},
@model_class=Position,
@restrictions=

[#<Criteria::In:0xb5481a0
@attribute_name=“category_id”,
@model_class=Position,
@parent=#<Criteria::Query:0xb5487b8 …>,
@query=#<Criteria::Query:0xb5487b8 …>,

@restrictions=[],
@value=["1"]>,

#<Criteria::In:0xb548098
@attribute_name=“state_id”,
@model_class=Position,
@parent=#<Criteria::Query:0xb5487b8 …>,

@query=#<Criteria::Query:0xb5487b8 ...>,
@restrictions=[],
@value=["27"]>]>

However when all fields are deselected-
#<Criteria::Query:0xb43af50
@join_aliases={“positions”=>“positions”},

@model_class=Position,
@restrictions=[]>

Stuart

Hi --

Adding something at the bottom:

Hi --

Trying various things here to eliminate this problem. In my dyanmic

search ,

if no search criteria is selected then all records are returned. It's

not

what I want. By the way this is an observe_form. Help is greatly
appreciated.

Here is the controller -

def list
       category_id = params[:category_id]
       state_id = params[:state_id]
       term_id = params[:term_id]
       city = params[:city]
       title = params[:title]

It doesn't look like you ever use those assignments. Are they
necessary?

No they do not get used, so no they are not necessary. However this is
something I haven't quite figured out yet regarding the plugin's behaviour.
Using regular AR syntax and find commands, they will recognize those
assignment. For some reason I am finding CQ does not.

I'm afraid I'm not following. It's not up to CQ to recognize the
assignments; it's up to Ruby.

       pq = Position.query # I'm using the plugin CriteriaQuery

I'm afraid I'm not familiar with it. However...

       pq.category_id_in(params[:category_id])
unless(params[:category_id]|| "").empty?

If you think it might be nil or "", you can use the blank? method.

I have tried blank? with no success. Down for futher explanation.

        pq.state_id_in(params[:state_id]) unless(params[:state_id]||

"").empty?
       pq.term_id_in(params[:term_id]) unless(params[:term_id]||

"").empty?

       pq.city_in(params[:city].split(",")) unless(params[:city]||
"").empty?
       pq.title_in(params[:title].split(",")) unless(params[:title]||
"").empty?
       pp pq

What does this show you?

This is the only way I could find to allow fields that were nil (user did
not make selection) to be evaluated as "".
A fake out in other words.

If it's absolutely necessary, then:

   params[:city].to_s.empty?

is a little nicer than that || thing.

Using PP , if for example 2 fields are selected:
#<Criteria::Query:0xb5487b8
@join_aliases={"positions"=>"positions"},
@model_class=Position,
@restrictions=
[#<Criteria::In:0xb5481a0
   @attribute_name="category_id",
   @model_class=Position,
   @parent=#<Criteria::Query:0xb5487b8 ...>,
   @query=#<Criteria::Query:0xb5487b8 ...>,
   @restrictions=[],
   @value=["1"]>,
  #<Criteria::In:0xb548098
   @attribute_name="state_id",
   @model_class=Position,
   @parent=#<Criteria::Query:0xb5487b8 ...>,
   @query=#<Criteria::Query:0xb5487b8 ...>,
   @restrictions=[],
   @value=["27"]>]>

However when all fields are deselected-
#<Criteria::Query:0xb43af50
@join_aliases={"positions"=>"positions"},
@model_class=Position,
@restrictions=[]>

I don't have time right now to study CriteriaQuery, but it seems like
a lot of work to do what should be a fairly simple query. Can you
just use find with :conditions?

David

I could use find with :conditions, although I haven’t really read up on how I could create a dynamic query of this nature.
i.e. where any / mulitple or all fields could be used. I’m sure it can be done. CQ appealed to me as it seems a simpler way to write things. I wouldn’t be the best representative of the plugin.

Stuart

Top posting, because I solved the issue with -

if
!params[:category_id]
!params[:state_id]
!params[:term_id]
!params[:city]
!params[:title]
“no criteria enetered”

    else


So using the plugin Criteria Query, my code for the 5 form fields ( just posting here to see if using just find woudl require more/less or the same amount of code) -

pq = Position.query
pq.category_id_in(params[:category_id]) unless(params[:category_id]|| “”).empty?
pq.state_id_in(params[:state_id]) unless(params[:state_id]|| “”).empty?
pq.term_id_in(params[:term_id]) unless(params[:term_id]|| “”).empty?
pq.city_in(params[:city].split(",")) unless(params[:city]|| “”).empty?
pq.title_in(params[:title].split(",")) unless(params[:title]|| “”).empty?
pp pq

    if
    !params[:category_id]
    !params[:state_id]
    !params[:term_id]
    !params[:city]
    !params[:title]
    "no criteria enetered"

   
    else
    @positions = pq.find
    render :partial => "positions_list", :layout => false