将表单添加到视图会给我一个路由问题

时间:2012-05-08 18:01:55

标签: ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我的rails应用程序中有3个控制器/型号: 胡椒 事件 链接

辣椒模型

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 %>

此视图效果很好,不会出现任何错误。

但是如果我在<ul>元素

之后添加此表单
<%= form_for([event, event.links.build]) do |f| %>
            <p><%= f.text_field :url %></p>
            <p><%= f.submit "Aggiungi link" %></p>
<% end %>

我收到此错误

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>}

这个错误是为了什么?

1 个答案:

答案 0 :(得分:1)

如果没有看到您的控制器代码,我无法确定这一点,但我怀疑问题是@events是Rails关系而不是正确的数组。在你的控制器中,如果你有类似的东西:

@events = @pepper.events

您需要将其更改为:

@events = @pepper.events.all

强制@events解析为具体数组。否则,迭代@events将包含您为第一个表单构建的空事件:

<%= form_for([@pepper, @pepper.events.build]) do |f| %>

如果这不能解决您的问题,请发布此视图的相关控制器代码。