Thank you very much for your help.

On Mar 13, 1:38 pm, Walter Lee Davis <wa...@wdstudio.com> wrote:
> On Mar 13, 2012, at 12:54 PM, dasibre wrote:
>
> > Thanks for the quick response Walter.
> > Rating is a text field.
> > "SERIALIZE" don't have it in my model, don't know what it is...will
> > look it up.
>
> > As you can tell by the method name "checkBoxTest" I'm testing the
> > feature one check box at a time, but
> > you make a good point about using LIKE, IN to compare. I will try
> > that.
>
> I meant to use IN rather than LIKE. LIKE is "case-insensitive text 
> comparison" and IN is "does this value occur in that array". params[:rating] 
> is a hash, but it will get converted to an array if you pass it into the 
> where() method the way you are doing it. I'm still not clear why it's being 
> converted to YAML the way it is in your LIKE clause, but I guess that's the 
> only string-like thing that would preserve the meaning of the hash.
>
> It's not as neat as your HAML, but the following ERB:
>
> <p>
> <%= check_box_tag "ratings[G]", 'G', (params[:ratings].include? 'G') %>
> <%= label_tag "ratings[G]", "G" %>
> </p>
> <p>
> <%= check_box_tag "ratings[PG]", 'PG', (params[:ratings].include? 'PG') %>
> <%= label_tag "ratings[PG]", "PG" %>
> </p>
> <p>
> <%= check_box_tag "ratings[R]", 'R', (params[:ratings].include? 'R') %>
> <%= label_tag "ratings[R]", "R" %>
> </p>
> <p>
> <%= check_box_tag "ratings[NC-17]", 'NC-17', (params[:ratings].include? 
> 'NC-17') %>
> <%= label_tag "ratings[NC-17]", "NC-17" %>
> </p>
> <p>
> <%= check_box_tag "ratings[X]", 'X', (params[:ratings].include? 'X') %>
> <%= label_tag "ratings[X]", "X" %>
> </p>
> <p>
> <%= check_box_tag "ratings[NR]", 'NR', (params[:ratings].include? 'NR') %>
> <%= label_tag "ratings[NR]", "NR" %>
> </p>
>
> Expands to this HTML:
>
> <p>
>         <input id="ratings_G" name="ratings[G]" type="checkbox" value="G" />
>         <label for="ratings_G">G</label>
> </p>
> <p>
>         <input checked="checked" id="ratings_PG" name="ratings[PG]" 
> type="checkbox" value="PG" />
>         <label for="ratings_PG">PG</label>
> </p>
> <p>
>         <input id="ratings_R" name="ratings[R]" type="checkbox" value="R" />
>         <label for="ratings_R">R</label>
> </p>
> <p>
>         <input id="ratings_NC-17" name="ratings[NC-17]" type="checkbox" 
> value="NC-17" />
>         <label for="ratings_NC-17">NC-17</label>
> </p>
> <p>
>         <input id="ratings_X" name="ratings[X]" type="checkbox" value="X" />
>         <label for="ratings_X">X</label>
> </p>
> <p>
>         <input id="ratings_NR" name="ratings[NR]" type="checkbox" value="NR" 
> />
>         <label for="ratings_NR">NR</label>
> </p>
>
> And when that form is submitted, it will appear at the controller as 
> params[:ratings]. If you pass it into your where clause, using IN instead of 
> LIKE, you should get a query like the one I outlined. As a bonus, the 
> checkboxes will maintain their state through a form request.
>
> Walter
>
>
>
>
>
>
>
>
>
> > I'm not sure if this is right but, I think the check_box_tag passes an
> > extra parameter "on" in addition to the Ratings and i'm not sure how
> > to deal with that.
>
> > On Mar 13, 12:32 pm, Walter Lee Davis <wa...@wdstudio.com> wrote:
> >> On Mar 13, 2012, at 12:21 PM, dasibre wrote:
>
> >>> rails newbie need help with form.
> >>> I have a movie application. In the index I list all the movies and in
> >>> addition i have ratings check boxes for (R, PG, PG-13, G)
> >>> basically when you check a box and submit, the page should refresh
> >>> with movies with the chosen rating. So if you check R,PG; only movies
> >>> rated R and PG should be displayed.
> >>> At the moment, when i check any box and submit the query seems to work
> >>> but no movies are returned. When i checked the log this is what i get.
>
> >>> Parameters: {"utf8"=>"✓", "ratings"=>{"R"=>"on"}}
> >>> Movie Load (0.1ms)  SELECT "movies".* FROM "movies" WHERE (rating
> >>> LIKE'---
> >>> - R
> >>> - ''on''
> >>> ')
>
> >> This looks very much like it's trying to compare the field with YAML. What 
> >> is the field type for rating, and have you added serialize to it anywhere? 
> >> (I don't see that in your model, but you haven't quoted all of it.)
>
> >>> here's my movie.rb model code.
> >>> def self.checkBoxTest(ratings)
> >>>            if ratings
> >>>                    where('rating LIKE?', ratings)
> >>>            else
> >>>                    scoped
> >>>            end
> >>>    end
>
> >> Instead of LIKE, try IN. You're trying to compare an array with a single 
> >> value, if I'm reading this correctly.
>
> >> If only the R is checked, your params[:ratings] will equal ['R']. If R and 
> >> PG are checked, it will look like ['R','PG']. So a query like this in raw 
> >> SQL would look like SELECT * FROM movies WHERE rating IN ('R','PG');
>
> >> Walter
>
> >>> note: using haml for views:
> >>> index.html.haml
> >>> %h1 All Movies
> >>> = form_tag movies_path, :method => :get do
> >>>  Include:
> >>>  - @all_ratings.each do |rating|
> >>>    ="#{rating}"
> >>>    = check_box_tag "ratings[#{rating}]", params[:ratings]
> >>>  = submit_tag 'Refresh', :name => nil
> >>> %table#movies
>
> >>> def index
> >>>    @movies = Movie.order(sort_column)
> >>>    @movies = Movie.checkBoxTest(params[:ratings])
> >>>    @all_ratings = Movie.find_all_rating
> >>>  end
> >>> here's my controller index method
>
> >>> --
> >>> You received this message because you are subscribed to the Google Groups 
> >>> "Ruby on Rails: Talk" group.
> >>> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> >>> To unsubscribe from this group, send email to 
> >>> rubyonrails-talk+unsubscr...@googlegroups.com.
> >>> For more options, visit this group 
> >>> athttp://groups.google.com/group/rubyonrails-talk?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Ruby on Rails: Talk" group.
> > To post to this group, send email to rubyonrails-talk@googlegroups.com.
> > To unsubscribe from this group, send email to 
> > rubyonrails-talk+unsubscr...@googlegroups.com.
> > For more options, visit this group 
> > athttp://groups.google.com/group/rubyonrails-talk?hl=en.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to