Undefined method when creating a has_many relationship

My first attempt at working with a new has_many relationship is throwing an error in the view when I try to create a new 'rcost' instance linked to a 'resource' (each resource can have multiple costs):

"undefined method `rcosts_path' for #<ActionView::Base:0x715bc60>"

Here is the view (new.html.erb) code that appears to be causing the error (I do not reference rcosts_path anywhere in the view):

<% form_for(@rcost) do |f| %>

Here are my model declarations:

class Resource < ActiveRecord::Base   has_many :rcosts end

class Rcost < ActiveRecord::Base   belongs_to :resource end

Here is my route declaration:

map.resources :resources, :has_many => :rcosts

I first tried the build method in my rcosts_controller:

@rcost = @resource.rcosts.build

Then tried new and manually setting the foreign key:

@rcost = @resource.rcosts.new @rcost.resource_id = @resource.id

But neither worked.

I'd really appreciate it if someone could tell me what is going wrong and how I can create a new rcost instance associated with an existing resource instance.

Thanks in advance! Mark

rcosts_path is being invoked by form_for, when it computes where the form should be posting too. Since you've got a nested resource you've got to tell form_for which Resource this @rcost belongs to.


Thanks, Fred - very helpful orientation. I assumed (mistakenly, obviously) that form_for would see the foreign key in @rcost and therefore know the @resource instance it should be associated with.

I searched around and found two recommendations that appear to address this issue I am having:

<% form_for([@resource, @rcost]) do |f| %> and <% form_for([:resource, @rcost]) do |f| %>

Not sure how behavior will differ with each version, but I will try them and report back on my results.


Hi Fred,

That did it: <% form_for([@resource, @rcost]) do |f| %>

It's all obvious in hindsight.

Thanks again, Mark