On Sat, Oct 9, 2010 at 12:17 PM, Anders_P <[email protected]> wrote:
> Hi!
>
> Here is what I think it the most relevant part of the home view,
>
> # Renders the menu
> <%= render "shared/categories" %>
> .
> .
> .
> # Renders ads, unless its empty
> <div class="right_container body_copy">
> <% if @ads.empty? %>
> Hittade inga annonser.
> <% else %>
> <%= render @ads %>
> <% end %>
> </div>
>
> <div class="paginate body_copy">
> <%= will_paginate @ads, :previous_label => t(:previous), :next_label
> => t(:next) %>
> </div>
>
> I'm getting "Hittade inga annonser" which means "Couldn't find any
> ads" when I click on the link, but it shouldn't be empty. It should
> render all ads that matches a certain condition, for example, :gender
> => 'female', category => ' accessories'. I have checked the database
> and it should get two rows.
>
> It works when I have methods like this:
>
> def female_accessories
> @ads = Ad.find_all_by_gender_and_category('dam',
> 'Accessoarer').paginate(:page => params[:page])
> @title = "Startsidan"
> render 'home'
> end
>
> But this isn't very DRY, since I would need to have an action for
>
> every category. I want something slightly more dynamic.
>
Right - this is going to be a very ugly controller in no time. But fix the
problem at hand and then you can play with making it dry. Google the term
'named scopes' in google and this may help. If nothing else, move this kind
of logic into a model, it should not be in a controller. Controller ideally
just handles requests and routing of them, business logic should be in
models or other classes.
>
> I hope i'm understandable.
>
> Tips and links regarding ruby-debug would be really nice!
>
This is probably a good place to pick up ruby debug.
Do this:
1) gem install ruby-debug
(note if you are using Rails 3 and Ruby 1.9.2 you might need: gem install
ruby-debug19. This is what I am using.)
2) Now you can put a breakpoint wherever you want by typing 'debugger' where
you want the execution to stop --- so for example:
def female_accessories
debugger
@ads = Ad.find_all_by_gender_and_category('dam',
'Accessoarer').paginate(:page => params[:page])
@title = "Startsidan"
render 'home'
end
3) Then restart your rails server:
If Rails 3:
rails server --debugger
If < Rails 3:
script/server --debugger
4) Now execute your page - load the page. The execution will stop when you
get to the break point. Go to your server console and you should see some
familiar code and line number. From there you can type in whatever ruby you
want to debug (like irb). Type 'n' to go to the next line, 'c' to continue.
Using this you should be able to figure out what is going on in your code.
Great tool to have, I use it often several times a day.
>
> Thanks!
> // Anders
>
>
>
> On 9 Okt, 18:21, David Kahn <[email protected]> wrote:
> > On Sat, Oct 9, 2010 at 11:13 AM, Anders_P <[email protected]>
> wrote:
> > > Hi! Thanks for your help. But I still doesn't get it to work. I've
> > > changed the controller action so it looks like:
> >
> > > def category
> > > gender = params[:gender]
> > > category = params[:category]
> > > @ads = Ad.find_all_by_gender_and_category(gender,
> > > category).paginate(:page => params[:page])
> > > @title = "Startsidan"
> > > render 'home'
> > > end
> >
> > > And in the view:
> >
> > > <li class="li_content"><%= link_to "Accessoarer", :action =>
> > > 'category', :gender => 'female', :category => 'Accessoarer' %></
> > > li><br />
> >
> > > When I press the link the url changes to this:
> >
> > >http://localhost:3000/kategori?gender=female&category=Accessoarer
> >
> > > I don't get any errors, but it doesn't find anything. Any idea on what
> > > might be wrong?
> >
> > So you are rendering the 'home' view - can you show me this? Also,
> describe
> > what you are expecting to see. Have you also verified that you are
> getting
> > good values on @ads and @title (which I assume you are doing something
> with
> > in your view)? I would recommend if you have not used it yet to get
> familiar
> > with ruby-debug. This way you can step in to your controller in action
> and
> > check these attributes (of course even better is get used to writing
> tests
> > for your code, but I know this might be overwhelming at first).
> >
> > Let me know - if you need help with ruby-debug let me know --- if so do
> give
> > me the version of Rails and version of Ruby you are running.
> >
> >
> >
> >
> >
> > > // Anders
> >
> > > On 9 Okt, 17:23, David Kahn <[email protected]> wrote:
> > > > On Sat, Oct 9, 2010 at 7:41 AM, Anders_P <[email protected]>
> > > wrote:
> > > > > Hello!
> >
> > > > > I'm trying to create a menu. I have a controller that takes two
> > > > > attributes, like this:
> >
> > > > > def category(gender, category)
> > > > > @ads = Ad.find_all_by_gender_and_category(gender,
> > > > > category).paginate(:page => params[:page])
> > > > > @title = "Startsidan"
> > > > > render 'home'
> > > > > end
> >
> > > > Is this your controller code? If so you have issues as (someone
> correct
> > > me
> > > > if this is a new Rails 3 construct that I am clueless) you should not
> be
> > > > taking arguments in the signature. If the params gender and category
> are
> > > > needed they should be accessed as params[:gender] params[:category].
> >
> > > > So in your view you need something like this below. Also seehttp://
> > > apidock.com/rails/ActionView/Helpers/UrlHelper/link_tofor info on
> > > > link_to helper.
> >
> > > > <%= link_to "Accessories", :controller => "categories", :action =>
> > > "show",
> > > > :gender => "male", :category => "zzz"
> >
> > > > and then in your controller action
> >
> > > > def show
> > > > gender = params[:gender]
> > > > category = params[:category]
> > > > # now do what you want with the data
> > > > end
> >
> > > > David
> >
> > > > > And in my view I have a list with menu options:
> >
> > > > > <li class="li_content"><%= link_to "Accessoarer", :action =>
> > > > > "category('dam', 'Accessoarer')" %></li><br />
> >
> > > > > And my routes it look like this:
> >
> > > > > match '/dam-accessoarer', :to => "pages#category('dam',
> > > > > 'Accessoarer')"
> >
> > > > > But it doesn't work.
> >
> > > > > I get the following error.
> >
> > > > > Unknown action
> >
> > > > > The action 'category('dam', 'Accessoarer')' could not be found for
> > > > > PagesController
> >
> > > > > Any help on how to solve it would be greatly appreciated!
> >
> > > > > Thanks!
> > > > > // Anders
> >
> > > > > --
> > > > > 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
> [email protected]
> > > .
> > > > > To unsubscribe from this group, send email to
> > > > > [email protected]<rubyonrails-talk%[email protected]><rubyonrails-talk%2Bunsubscrib
> [email protected]><rubyonrails-talk%2Bunsubscrib
> > > [email protected]>
> > > > > .
> > > > > For more options, visit this group at
> > > > >http://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 [email protected]
> .
> > > To unsubscribe from this group, send email to
> > > [email protected]<rubyonrails-talk%[email protected]><rubyonrails-talk%2Bunsubscrib
> [email protected]>
> > > .
> > > For more options, visit this group at
> > >http://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 [email protected].
> To unsubscribe from this group, send email to
> [email protected]<rubyonrails-talk%[email protected]>
> .
> For more options, visit this group at
> http://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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.