rails的新手,并逐步完成四部分教程(https://www.youtube.com/watch?v=zeCp6IzOrpk)的第3部分。已经解决了很多错误,但这个错误让我在过去的一天停滞不前。希望有人可以提供帮助。
我将paperclip gem添加到我的应用程序中,当我尝试使用图像文件创建新书时会发生此错误。
错误是
书中的NoMethodError#Create
显示第2行引发的/BookReview/app/views/books/_form.html.erb:
未定义的方法`map'为零:NilClass 你的意思是?龙头 模板包含跟踪:app / views / books / new.html.erb
应用程序跟踪
app / views / books / _form.html.erb:2:
block in _app_views_books__form_html_erb__680817446_105363440' app/views/books/_form.html.erb:1:in
_ app_views_books__form_html_erb__680817446_105363440' app / views / books / new.html.erb:4:在_app_views_books_new_html_erb__1556443805_105196100' app/controllers/books_controller.rb:32:in
创建'
我认为问题出在我的书籍控制器
中的创建操作中def create
@book = current_user.books.build(book_params)
@book.category_id = params[:category_id]
if @book.save
redirect_to root_path
else
render 'new'
end
end
当我在 @ book.category_id = params [:category_id] 下直接添加以下行时,我可以提交没有错误的表单,但当我查看时,该文件与该书没有关联控制台。
@ book.book_img = params [:book_img]
最后一件事是私人诉讼,我已将:book_img添加到。
def book_params
params.require(:book).permit(:title, :description, :author,:category_id, :book_img)
end
希望有人可以提供帮助。提前谢谢!
编辑:
_form.html.erb
<%= simple_form_for @book, :html => { :multipart => true } do |f| %>
<%= select_tag(:category_id, options_for_select(@categories), :prompt => "Select a category") %>
<%= f.file_field :book_img %>
<%= f.input :title, label: "Book Title" %>
<%= f.input :description %>
<%= f.input :author %>
<%= f.button :submit %>
<% end %>
答案 0 :(得分:0)
我认为_form.html.erb中的@categories
可能是零。在渲染表单的控制器中,请确保定义@categories例如
@categories = Categories.all
答案 1 :(得分:0)
我的创建动作也添加了这个
soup.select("a[href^=http]")
因为错误...它渲染相同的new.html.erb和@categories不存在
答案 2 :(得分:0)
试试这个:
<强> _form.html.erb 强>
def create
if @book = Book.create(book_params)
redirect_to root_path
else
render 'new'
end
end
private
#strong params
def book_params
params.require(:book).permit(:title, :description, :author,:category_id, :book_img).merge(user_id: current_user.id)
end
<强> books_controller.rb 强>
if (copyLayout != null) {
if (copyLayout.isTypePortlet()) {
ActionUtil.copyPreferences(
actionRequest, layout, copyLayout);
答案 3 :(得分:0)
感谢大家提供大量帮助。我学到了很多。我已经解决了这个问题。
我删除了paperclip gem并安装了最新版本
gem 'paperclip', '~> 4.3', '>= 4.3.6'
我重新安装了ImageMagic并将PATH添加到了我的development.rb中。
我的开发.rb最初有:
Paperclip.options[:command_path] = "/usr/local/bin/"
由于我在Windows上,我不得不用Paperclip.options[:command_path] = 'C:\Program Files (x86)\GnuWin32\bin'
替换它以使其工作。
现在一切正常。再次感谢大家的帮助。