0

私のレールアプリには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

コントローラのコードを見ないと、これはわかりませんが、問題は@events適切な配列ではなくRailsの関係にあると思われます。コントローラで、次のようなものがある場合:

@events = @pepper.events

これを次のように変更する必要があります。

@events = @pepper.events.all

@eventsを強制的に具象配列に解決します。それ以外の場合、繰り返し処理する@eventsと、最初のフォーム用に作成した空のイベントが含まれます。

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

これで問題が解決しない場合は、このビューに関連するコントローラーコードを投稿してください。

于 2012-05-08T18:11:53.637 に答える