F.checkbox?

Okay so I have a typical search page where a keyword is entered and
results are retrieved that match the keyword. What I want to do now is
have checkboxes to search for results in specific areas (my site is a
big events calendar with “streams” and “audiences”) I want to use the
checkboxes to look for results in ‘streams’, ‘audiences’, or both. I
want to be able to return either true or false from a method depending
on whether or not a box is checked. I have no idea how to do this, I’ve
only used checkboxes with a database before, and I don’t want to use
columns in a database for this.

This is my setup so far:

in search view:

<% form_for :event do |f| %> <label for="stream_search">Search Streams</label> <%= f.check_box :search_streams, {:class=> "check"} %><br /> <label for="aud_search">Search Audiences</label> <%= f.check_box :search_auds, {:class=> "check"} %> <br /> <% end %>

and I want to be able to somehow get these methods in the event model to
return either true or false depending on the checkboxes so I can use
them in if-statements in my search method:

[code=] def search_streams
true

end

def search_auds
true

end[/code]

Thanks in advance for any help!

<% form_for :event do |f| %> <label for="stream_search">Search Streams</label> <%= f.check_box :search_streams, {:class=> "check"} %><br /> <label for="aud_search">Search Audiences</label> <%= f.check_box :search_auds, {:class=> "check"} %> <br /> <% end %>

if you use them this way, Rails may complain about missing columns,
since the form _for is bound to the events model.
You could use simple check_box_tag here:

<%= check_box_tag(“Search Streams”, “search_streams”) %>

or
<%= check_box_tag(“Search Streams”, “event[search_streams]”) %>

the second version would (if I got the syntax right) add the param to
params[:event] instead creating it’s own.

the return value would be in params[:search_streams] and be “0” for
false or “1” for checked. (As a string, not number)

So you could do
if params[:search_streams] == “1” then

end

Thorsten M. wrote:

if you use them this way, Rails may complain about missing columns,
since the form _for is bound to the events model.
You could use simple check_box_tag here:

<%= check_box_tag(“Search Streams”, “search_streams”) %>

or
<%= check_box_tag(“Search Streams”, “event[search_streams]”) %>

the second version would (if I got the syntax right) add the param to
params[:event] instead creating it’s own.

the return value would be in params[:search_streams] and be “0” for
false or “1” for checked. (As a string, not number)

So you could do
if params[:search_streams] == “1” then

end

Should this still work if I want to be able to use the result of the
checkboxes from the Search view in my Event model? I have this now:

<% form_tag({:controller => ‘search’, :action => ‘keyword’}, {:method =>
‘post’}) do -%>
<%= text_field_tag ‘text’ -%><%= submit_tag ‘Search’ -%>

<%= check_box_tag(“Search Streams”, “event[search_streams]”) %>Search
Streams

<%= check_box_tag(“Search Audiences”, “event[search_auds]”) %>Search
Audiences

in my search index, and in my Event model I have:

def self.search_streams
return params[:search_streams] == “1”
end

def self.search_auds
return params[:search_auds] == “1”
end

def self.search(keywords, options = {}, *args)

if search_streams
for cal in streams

if search_auds
for cal in audiences

It’s telling me “undefined local variable or method `params’ for
Event:Class”
with this, I probably just did something wrong with what you said.

Thanks so much for your help!

Should this still work if I want to be able to use the result of the
checkboxes from the Search view in my Event model? I have this now:

no, you can’t access the params hash from within the model
(You could handle that by passing it to a method, but that’s not the way
to go)

In case you want to access in in te model just do that:
Add an attr_accessor for those fields to your model like

attr_accessor :search_streams
attr_accessor :search_aud

Then you can continue with yor original code:

<%= f.check_box :search_streams, {:class=> “check”} %>

That way the fields can be handled like db columns in the model, without
having to actually have them in db

(Sorry, should have thought about that option)

So now I have another question to add to this thread! Is there a way to
get one of these checkboxes to become inactive if the other is checked?

Thorsten M. wrote:

attr_accessor :search_streams
attr_accessor :search_aud

Then you can continue with yor original code:

<%= f.check_box :search_streams, {:class=> “check”} %>

That way the fields can be handled like db columns in the model, without
having to actually have them in db

(Sorry, should have thought about that option)

okay so i put the attr_accessor statements in the Event model, and i
changed my boxes back how I had them, but the methods don’t seem to be
getting a value because my searches give no results no matter what I
check:

methods in the Event model:

def self.search_streams
return :search_streams == 1
end

def self.search_auds
return :search_auds == 1
end