Reputation: 5425
I've 3 controllers/models in my rails app: peppers events links
has_many :events
belongs_to :pepper
has_many :links
belongs_to :event
Peps::Application.routes.draw do
resources :events do
resources :links
end
resources :peppers do
resources :events
end
resources :links
resources :events
resources :peppers
end
<p id="notice"><%= notice %></p>
<%= form_for([@pepper, @pepper.events.build]) do |f| %>
<p>Titolo : <%= f.text_field :title %></p>
<p>Note: <%= f.text_area :note %></p>
<p><%= f.submit "Aggiungi evento" %></p>
<% end %>
<p>
<b>Title:</b>
<%= @pepper.title %>
</p>
<p>
<b>Note:</b>
<%= @pepper.note %>
</p>
<hr>
<% for event in @events %>
<h3><%= event.title %></h3>
<p><%= event.note %></p>
<ul>
<% for link in event.links %>
<li><%= link.url %></li>
<% end %>
</ul>
<%= link_to 'Cancella evento', link, confirm: 'Are you sure?', method: :delete %>
<% end %>
<%= link_to 'Edit', edit_pepper_path(@pepper) %> |
<%= link_to 'Back', peppers_path %>
This view work very well and no errors appears.
But if I add this form after the <ul>
element
<%= form_for([event, event.links.build]) do |f| %>
<p><%= f.text_field :url %></p>
<p><%= f.submit "Aggiungi link" %></p>
<% end %>
I get this error
No route matches {:controller=>"links", :format=>nil, :event_id=>#<Event id: nil, title: nil, note: nil, created_at: nil, updated_at: nil, pepper_id: 4>}
What this error is for?
Upvotes: 0
Views: 35
Reputation: 7365
Without seeing your controller code I can't be sure of this, but I suspect the issue is that @events
is a Rails relation instead of a proper array. In your controller, if you have something like:
@events = @pepper.events
you will want to change that to:
@events = @pepper.events.all
to force @events to resolve to a concrete array. Otherwise, iterating over @events
will include the empty event you built for your first form:
<%= form_for([@pepper, @pepper.events.build]) do |f| %>
If this does not solve your issue, please post the relevant controller code for this view.
Upvotes: 1