Hi, im a rails newbie, so please be gentle: let''s say category habtm products and i''ve got a product with the id 7. when i use the url /categories/7/products should the server show me only the categories of product 7? On my Server it always shows all categories i have. How do i solve this the right way? I edited the routes.rb so, that map.resources :categories, :has_many => [:products] But this does not change anythings, using /categories/7/products always leads to the index action of the products controller. Is the right way to test in the index action of the products controller whether category_id is set in params and use this information to only show products of this category? Or is there a better way? Thanks, HansFH
It sounds like your routes are set up alright, but yeah, you''ll still need to add code so your action knows how to handle it. In your ProductsController#index action, you probably have something like this? @products = Product.all Since you have category_id in the params, something like this should work: if params[:category_id] @category = Category.find(params[:category_id]) @products = @category.products end Personally, if I have a controller that''s always used as a nested resource, I put the initialization of the parent into a before_filter, so it''s called for every action. On Aug 27, 5:54 am, hansfh <i...-WPykkbVKKGsvtn4omCC9AQ@public.gmane.org> wrote:> Hi, > im a rails newbie, so please be gentle: > > let''s say category habtm products and i''ve got a product with the id > 7. > > when i use the url > > /categories/7/products > > should the server show me only the categories of product 7? > > On my Server it always shows all categories i have. > > How do i solve this the right way? > > I edited the routes.rb so, that > > map.resources :categories, :has_many => [:products] > > But this does not change anythings, using > /categories/7/products always leads to the index action of the > products controller. > > Is the right way to test in the index action of the products > controller whether category_id is set in params and use this > information to only show products of this category? Or is there a > better way? > > Thanks, > > HansFH
2009/8/27 hansfh <it-WPykkbVKKGsvtn4omCC9AQ@public.gmane.org>:> > Hi, > im a rails newbie, so please be gentle: > > let''s say category habtm products and i''ve got a product with the id > 7. > > when i use the url > > /categories/7/products > > should the server show me only the categories of product 7? > > On my Server it always shows all categories i have. > > How do i solve this the right way? > > I edited the routes.rb so, that > > map.resources :categories, :has_many => [:products] > > But this does not change anythings, using > /categories/7/products always leads to the index action of the > products controller. > > Is the right way to test in the index action of the products > controller whether category_id is set in params and use this > information to only show products of this category? Or is there a > better way?I am not sure if this answers your question or not, and you may know this already, but if you have found the product with id 7 and it is in variable @product say, then the categories for that product are available as an array in @product.categories. Apologies if this is nothing to do with what you want to achieve. Colin
On Aug 27, 2009, at 8:54 AM, hansfh wrote:> Hi, > im a rails newbie, so please be gentle: > > let''s say category habtm products and i''ve got a product with the id > 7. > > when i use the url > > /categories/7/products > > should the server show me only the categories of product 7? > > On my Server it always shows all categories i have. > > How do i solve this the right way? > > I edited the routes.rb so, that > > map.resources :categories, :has_many => [:products] > > But this does not change anythings, using > /categories/7/products always leads to the index action of the > products controller. > > Is the right way to test in the index action of the products > controller whether category_id is set in params and use this > information to only show products of this category? Or is there a > better way? > > Thanks, > > HansFHIf you have a line in ProductsController#index like: @products = Product.find(:all) Then of course you''ll see all products. The question is what you want to see at that url. I''d expect to see all the products in category 7 def index if find_category @products = @category.products else flash[:error] = "No category with id=#{params[:category_id]}" redirect_to categories_path end end def find_category @category = Category.find_by_id(params[:category_id]) end And you can even put the find_category into a before_filter and redirect from it directly. -Rob Rob Biedenharn http://agileconsultingllc.com Rob-xa9cJyRlE0mWcWVYNo9pwxS2lgjeYSpx@public.gmane.org