Basic Rails problem with has_many nil values and permalinks

Hi,

I have a model property with has_many. I find the property and then I need to find the name of the building or the neighborhood that the property belongs to. The property is not always assigned a building or neighborhood.

This becomes a problem when createing permalinks with permalink_fu.

has_permalink [:neighborhood_name, :building_name, :address]

The neighborhood name and building name are defined here in property.rb

  def neighborhood_name       neighborhood.name   end

  def building_name        building.name   end

If the property does not have a neighborhood or a building, then I get an error: The error occurred while evaluating nil.name):   app/models/property.rb:425:in `neighborhood_name'

I know that I'm missing something really basic in Rails. Can someone help me out so that it generates the permalink even if the neighborhood or building are empty?

Thanks.

You could just test neighborhood and building in your _name methods and return an appropriate default if nil.

Colin

Cs Webgrl wrote:

Colin Law wrote:

You could just test neighborhood and building in your _name methods and return an appropriate default if nil.

Thanks for your reply. I don't mean to make you do all of the work, but I can't seem to find the correct syntax to go with this to make it pass correctly? Everything I put into the _name methods is ignored and I still get an error.

What are you putting into those methods? Instead of asking for our code, show us yours.

Thanks for your help.

Best,

You have snipped the original. I don't know whether has_permalink is happy with nil parameters, if so then you could just do

def neighborhood_name      neighborhood.name if neighborhood end

This will return nil if neighborhood is nil. If you need a default name however then something like

def neighborhood_name      neighborhood ? neighborhood.name : 'default_name' end

If Marnen reads this he will tell you (and probably me) in no uncertain terms to read up on basic Ruby coding :slight_smile:

Colin

Colin Law wrote:

still get an error.

You have snipped the original. I don't know whether has_permalink is happy with nil parameters, if so then you could just do

def neighborhood_name      neighborhood.name if neighborhood end

This will return nil if neighborhood is nil. If you need a default name however then something like

def neighborhood_name      neighborhood ? neighborhood.name : 'default_name' end

Yeah, that's about what I was thinking.

If Marnen reads this he will tell you (and probably me) in no uncertain terms to read up on basic Ruby coding :slight_smile:

Good God, am I becoming a List Personality [TM]? :slight_smile:

You're right, I'd recommend that the OP brush up on basic Ruby. For you, I'd simply recommend not spoon-feeding...

Colin

Best,

I think sometimes a modicum of spoon feeding is helpful to get people over immediate problems, this combined with hints as to where to go next. In this case I bounced the hint off you so I looked like the nice guy :slight_smile:

Somehow this thread seems to have got split, for me anyway. Your replies are appearing on a different thread to the original.

Colin

Colin Law wrote:

I think sometimes a modicum of spoon feeding is helpful to get people over immediate problems, this combined with hints as to where to go next. In this case I bounced the hint off you so I looked like the nice guy :slight_smile:

Thank you for the information. Yes, I need to read up on some basic Ruby. I was thinking that I needed to do neighborhood.<something> and not just neighborhood which is why I was unsuccessful. Back to reading. I have the David Black's Ruby for Rails book along with the Pick axe book and AWD. If there's another resource that you recommend, please let me know.