0

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

这个错误是为了什么?

4

1 回答 1

1

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

@events = @pepper.events

您需要将其更改为:

@events = @pepper.events.all

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

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

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

于 2012-05-08T18:11:53.637 回答