Rails 3.1:升级导致我的link_to路径路径中断?

时间:2011-09-02 22:19:28

标签: ruby ruby-on-rails-3.1

在升级到3.1之前,我的一些路由在我的Rails 3.0.7应用程序中运行良好。

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

它显示ID为nil,但这不正确,因为我可以在此记录上显示其他值。

为什么会这样?我该如何解决?

1 个答案:

答案 0 :(得分:0)

看起来像嵌套模型在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