【发布时间】:2015-08-13 18:55:59
【问题描述】:
在我的应用程序中,有用户、列表和书籍。 Books belongs_to 列表,并且列表有很多书。我想做的是让用户创建一本新书并选择将书放在该表单中的列表。我正在尝试使用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
这是我提交 bParameters: {"utf8"=>"✓", "authenticity_token"=>"OaMLlxWbhfBmyYuofNoLv3SfYmh44DzpB+fvHJDqojw60fKRsk2JoSn8LCDxkumyGsOVMGkepiPP2f+T9PDBqA==", "book"=>{"list_id"=>"1", "title"=>"Example", "pages"=>"100", "author"=>"Example"}, "commit"=>"Add book"}
后出现在控制台中的参数
【问题讨论】:
-
你的控制器是什么样的?你那里有 book 的实例变量,看起来像 @book = Book.new 吗?
-
@MilesUA 是的,我愿意:
@book = current_user.books.build if logged_in?
标签: ruby-on-rails forms drop-down-menu formtastic