Glad to help. Definitely if you have not, at least for your models try to
start writing some tests -- I use rspec now but honestly if you are new to
tdd you could use test/unit just fine and get used to the process. The way I
see it is in the past before I wrote tests, I would write code and then
spend time debugging. I found that writing tests as I go actually formalizes
the debugging process I would go through, and then of course the result is a
test suite you can run whenever you want --- and at least you will know the
things you are testing for still work! I promise you will get addicted.

On Sat, Oct 9, 2010 at 2:07 PM, Anders_P <[email protected]> wrote:

> Thanks for your tips, I think I will follow your suggestion and create
> a new model 'Category', think it will get a lot cleaner.
>
> Thanks.
> // Anders
>
> On 9 Okt, 19:37, David Kahn <[email protected]> wrote:
> > 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]><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]><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.

Reply via email to