Formtastic Belongs_to association and undefined methods' _path'

时间:2015-08-13 18:56:00

标签: ruby-on-rails forms drop-down-menu formtastic

在我的应用程序中,有用户,列表和书籍。书籍属于列表,列表有很多书籍。我想要做的是让用户创建一本新书,并选择将书放在该表格中的列表。我试图使用formtastic。到目前为止,这是我的代码:

<%= semantic_form_for(@book) do |f| %>
        <%= render 'shared/error_messages', object: f.object %>
        <%= f.input :list, :as => :select, :collection => List.find(:all, :order => "name ASC") %>
        <%= f.text_field :title, class: 'form-control', placeholder: "Book title" %>
        <%= f.text_field :pages, class: 'form-control', placeholder: "# of pages" %>
        <%= f.text_field :author, class: 'form-control', placeholder: "Author" %>

        <%= f.submit "Add book", class: "btn btn-default green-hover" %>

    <% end %>

问题是我得到undefined method 'books_path' for #<#<Class:0x007fbe29898688>:0x007fbe29812da8>。但我认为我的routes.rb文件是正确的:

resources :users do
  resources :lists, shallow: true do
    resources :books, shallow: true
  end
end

我怎么会收到这个错误?

修改

我改变了我的路线:

resources :users do
  resources :lists, shallow: true
end
resources :books

现在表格呈现。但是,当我尝试提交它时,它不起作用:undefined local variable or method 'list' for #<BooksController:0x007fbe27cd6eb8>。如何从控制器中的创建操作访问哪个列表被选中?

编辑2

以下是我提交b Parameters: {"utf8"=>"✓", "authenticity_token"=>"OaMLlxWbhfBmyYuofNoLv3SfYmh44DzpB+fvHJDqojw60fKRsk2JoSn8LCDxkumyGsOVMGkepiPP2f+T9PDBqA==", "book"=>{"list_id"=>"1", "title"=>"Example", "pages"=>"100", "author"=>"Example"}, "commit"=>"Add book"}

后出现在控制台中的参数

1 个答案:

答案 0 :(得分:1)

我认为你的嵌套资源使它变得比它需要的更复杂。最佳做法是不要将资源嵌套到多个深度(http://guides.rubyonrails.org/routing.html#limits-to-nesting),但除非您有特定的嵌套原因,否则请保持资源不嵌套,如下所示:

resources :users
resources :lists
resources :books

如果你使用这样的非嵌套路线,你已经拥有的应该只是工作。 Formtastic旨在更好地处理这样的路线。如果您绝对必须拥有嵌套的资源,那么您将不得不告诉Formtastic要手动发布哪条路线,如下所示:

<%= semantic_form_for(@book, url: list_books_path({your_list_id_here}) do |f| %>