Hey everyone, I'm either blind to the obvious, or I'm being overly complicated.

I created a site that tracks events. Originally (out of ease and speed) I created a text field for the location of the event. My users (rightly) got tired of doing the copy/paste shuffle every time they wanted to create a new event. As there were only a handful of locations being used I figured it would be nice to break out the locations into their own model/controller and create a one-to-many association (event has one location, location has many events). This way, I can switch the location selection in the event form to a drop- down. Easy!

The events table now has a location_id foreign key and there's a "belongs_to :location" in the events model. The locations model has a "has_many :events" but it doesn't seem really necessary; there's no need or desire from the users to list the events by location. I've added it simply because every single example of a one-to-many association is built that way, though from what I' can tell "has_many" does not require anything in the locations table, it only generates a method that runs through the events table looking for a matching id in the locations_id foreign-key column. (eg: @location.events Follow? :) )

So to just to get things rolling, in views/events/show.html.erb I have the following section:
<p>
  <%= @event.location.name %><br />
  <%= @event.location.address1 %><br />
  <%= @event.location.address2 %><br />
  <%= @event.location.city %>, <%= @event.location.state %><br />
  <%= @event.location.zip %><br />
  <%= @event.location.other %><br />
</p>
(there is also a location.label, which is a short nickname used in the location drop-down)

Anyway, I figured it would be much more DRY to just call the "show" view/action in the Locations controller from within the "show" view for an event. IE, when I "show" and event, it "show"s the location. Nice and OO right?

It's either not so easy, or I'm off in left field.

The closest I can get is <%= render 'locations/show' %> but of course @location isn't set, so that does nothing. I tried adding "@location = Locations.find(@event.location_id)" to the show action in the Events controller, so that the above render would have a @location when it got to the view, but I get the error "uninitialized constant EventsController::Locations". (also tried find_by_id)

Not sure what to do, but since I've been banging my head against this for two days, I'm a bit numb. Overload a 'find' method in my Location model (not the controller, the model)? I hate leaving it as above, but I since the ugly works, I'll just put white-out on my screen whenever I edit that file.

All thoughts welcome!


Bob Campbell


_______________________________________________
Bdrg-members mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/bdrg-members

Reply via email to