未定义的方法`map'为零:NilClass你的意思是?龙头

时间:2016-06-17 12:44:43

标签: ruby-on-rails methods undefined

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 %>

4 个答案:

答案 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'替换它以使其工作。

现在一切正常。再次感谢大家的帮助。