Rails 3.1: Обновление привело к поломке моих маршрутов link_to path? - PullRequest
2 голосов
/ 03 сентября 2011

У меня есть несколько маршрутов, которые хорошо работали в моем приложении Rails 3.0.7 до обновления до 3.1.

# routes.rb
resources :chapters do
  resources :cards
end

resources :cards

С некоторым кодом контроллера, подобным этому:

  def show
    @book = Book.find(params[:book_id])
    @chapter = Chapter.find(params[:id])
    @card = @chapter.cards.new   # for "new card" form thats displayed on this same page
    respond_with(@chapter)
  end

С довольно типичным представлением, сгенерированным скаффолдом со ссылками:

<% @chapter.cards.each do |card| %>
    <%= link_to 'Edit', edit_card_path(card) %>
<% end %>

Теперь, если я попытаюсьвытащите его в браузере, я получаю такие ошибки:

No route matches {:action=>"edit", :controller=>"cards", :id=>#<Card id: nil, side1: nil, side2: nil, chapter_id: 6, created_at: nil, updated_at: nil>}

Показывается идентификатор nil, который не соответствует действительности, потому что я могу отображать другие значения в этой записи.

Почему это происходит?Как я могу это исправить?

1 Ответ

0 голосов
/ 03 сентября 2011

Похоже, что-то изменилось в способе работы вложенных моделей в Rails 3.1.Из того, что я могу сказать, вызов @chapter.cards.new добавляет модель пустой карты в верхнюю часть стека @chapter.cards, к которой он не привык.Поэтому вместо того, чтобы вызывать @chapter.cards.new и перебирать массив @chapter.cards в одном и том же действии, мне придется хранить их отдельно:

def show
  @book = Book.find(params[:book_id])
  @chapter = Chapter.find(params[:id])
  @card = Card.new
  @card.chapter_id = @chapter.id
  respond_with(@chapter)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...