Going by my application, I have an index.html.erb file that lists all articles and i was in need of a search box that would search all articles depending on the selected category.So firstly ,I created a search box within index.html.erb like this :
<h3> Search according to category</h3>
<%= form_tag( show_category_wise_path, method: "get") do %>
<%= select_tag(:category, options_for_select(@categories.collect{ |category| [category.category_name, category.id]})) %>
<%= submit_tag("Search", :class => "btn btn-primary" )%>
<% end %>
Here , It is important to understand what parameters select_tag receives. The First parameter :category provides us a category key in our params hash for the show_category_wise action of the ArticlesController (in my case) .
For the second parameter options_for_select method receives a collection . Here @categories object has an array of all category objects .It is something like this:
def index
@articles = Article.paginate page: params[:page] ,per_page: '2'
@categories = Category.all
end
Now understand the working of collect method through this simple example:
a = [1,2,3,4]
a.collect {|x| x*2}
returns [2,4,6,8].
Remember category_name and id are columns in the categories table.So we get something like this :
[["ruby",1],["java",2],["html",3],["c lang",4]]
Now if user selects html , the category key in params hash will have value 3.Now Let's look at the show_category_wise method :
def show_category_wise
@category = Category.find(params[:category])
@articles = @category.articles.paginate page: params[:page] ,per_page: '2'
end
Please take cognizance of association and pagination here .Now show_category_wise.html.erb
will simply list all those articles belonging to a particular category.
Thank You.
0 Comment(s)