I have the following models
entity
has_many :locations
has_many :sites, :through => :locations
location
belongs_to :entity
belongs_to :site
site
has_many :locations
has_many :entities, :through => :locations
AND routes:
map.resources :entities do |entity|
entity.resources :locations,
:collection
end
What I wish to do is to display all of the locations for a given entity.
I have modified locations_controller to this:
# Limit locations list to just the parent entity
before_filter :load_entity
# GET /locations
# GET /locations.xml
def index
@locations = @entity.locations.find(:all)
...
private
def load_entity
@entity = Entity.find parms[:entity_id]
end
And in views/entities/index.html.erb when I have this:
<td>
<%= link_to ''Locations'', entity_location_path -%>
</td>
Then I get this:
entity_location_url failed to generate from
{:controller=>"locations", :action=>"show"}
- you may have ambiguous routes, or you may need to supply
additional parameters for this route. content_url has
the following required parameters:
["entities", :entity_id, "locations", :id]
- are they all satisfied?
If I have this in index.html.erb instead:
<td>
<%= link_to ''Locations'',
entity_location_path(entity),
:method => ''index'' -%>
</td>
Then I get this:
entity_location_url failed to generate from
{:controller=>"locations", :entity_id=>#<Entity id: 1,
entity_name: "my first client", entity_legal_name: "My First
Client
Ltd.",
entity_legal_form: "CORP", created_at: "2008-03-25
22:41:43",
updated_at: "2008-03-25 22:41:43">,
:action=>"show"},
expected:
{:controller=>"locations", :action=>"show"},
diff:
{:entity_id=>#<Entity id: 1, entity_name: "my first client",
entity_legal_name: "My First Client Ltd.", entity_legal_form:
"CORP",
created_at: "2008-03-25 22:41:43", updated_at: "2008-03-25
22:41:43">}
Which sends me back, as far as I can tell, to the first form of the
call. Can someone straighten me out with respect to the proper link_to
call to use?
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
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
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
James Byrne wrote:> map.resources :entities do |entity| > entity.resources :locations, > :collection > endThis incudes the route: entity_location GET /entities/:entity_id/locations/:id {:controller=>"locations", :action=>"show"} So:> <td> > <%= link_to ''Locations'', entity_location_path -%> > </td> > > Then I get this: > > entity_location_url failed to generate from > {:controller=>"locations", :action=>"show"} > - you may have ambiguous routes, or you may need to supply > additional parameters for this route. content_url has > the following required parameters: > ["entities", :entity_id, "locations", :id] > - are they all satisfied?This is saying that the route is missing both :entity_id and :id to complete a route match.> If I have this in index.html.erb instead: > > <td> > <%= link_to ''Locations'', entity_location_path(entity), > :method => ''index'' -%> > </td> > > Then I get this: > > entity_location_url failed to generate from > {:controller=>"locations", :entity_id=>#<Entity id: 1,Here, you can see that you are now supplying :entity_id but you still need to supply the :id parameter (which is the particular location for this entity you want to GET). Since you are clearly after the index method, then you need to pluralise the "location" part of the helper name: link_to ''Locations'', entity_locations_path(entity) -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Mark Bush wrote:> Here, you can see that you are now supplying :entity_id but you still > need to supply the :id parameter (which is the particular location for > this entity you want to GET). > > Since you are clearly after the index method, then you need to pluralise > the "location" part of the helper name: > > link_to ''Locations'', entity_locations_path(entity)Thank you. I am now past this point and running into another problem. In the locations_controller I have this for my new method: def new @location = @entity.build_location respond_to do |format| format.html # new.html.erb format.xml { render :xml => @location } end end However, when I call this from views/locations/index.html.erb <%= link_to ''New location'', new_entity_location_path( params[:entity_id] ) %> Then I get this: undefined method `build_location'' for #<Entity:0x4df2ad8> I was under the impression that the build_location method was automatically generated in consequence of the have_many attribute in entity.rb. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
But, playing around in the console disabused me of that notion. What methods I have for locations in Entity are: - location_ids - location_ids- locations - locations I infer that locations is an array. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
James Byrne wrote:> I infer that locations is an array.It is an association object which includes the Enumerable module and so behaves like an array. For a has_many/belongs_to relationship, you can add new records from both sides of the relationship. In your case: class Entity has_many :locations class Location belongs_to :entity You can add a new location to an entity''s locations: e = Entity.find :first e.locations.build ... e.locations.create ... And you can create a new entity that a location will point to: l = Location.find :first l.build_entity ... l.create_entity ... -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Mark Bush wrote:> It is an association object which includes the Enumerable module and so > behaves like an array. > > For a has_many/belongs_to relationship, you can add new records from > both sides of the relationship. In your case: > > class Entity > has_many :locations > > class Location > belongs_to :entity > > You can add a new location to an entity''s locations: > > e = Entity.find :first > e.locations.build ... > e.locations.create ... >This is the bit I was missing. I was trying to use e.build_location. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---