2016-08-31 11 views
0

私はレールの私の本の形でこのエラーを受け取ることができません。最初の引数はnilを含むか空である

nilを含めるか、空にすることはできません形式で最初の引数

フォーム

<%= form_for @book, html: { multipart: true } do |f| %> 
    <% if @book.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2> 

     <ul> 
     <% @book.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :author %><br> 
    <%= f.text_field :author %> 
    </div> 
    <div class="field"> 
    <%= f.label :language %><br> 
    <%= f.text_field :language %> 
    </div> 
    <div class="field"> 
    <%= f.label :year %><br> 
    <%= f.text_field :year %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
    </div> 
    <div class="field"> 
    <%= f.label :total_pages %><br> 
    <%= f.text_field :total_pages %> 
    </div> 
    <div class="field"> 
    <%= f.label :rating %><br> 
    <%= f.text_field :rating %> 
    </div> 
    <div class="field"> 
    <%= f.label :image %><br> 
    <%= f.file_field :image %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 

<% end %> 

コントローラ

class BooksController < ApplicationController 
    before_action :set_book, only: [:show, :edit, :update, :destroy] 
    before_action :authenticate_user!, except: [:index, :show] 



    def search 
    if params[:search].present? 
     @books = Book.search(params[:search]) 
    else 
     @books = Book.all 
    end 
    end 


    def index 
    @books = Book.all 
    end 


    def show 
    @reviews = Review.where(book_id: @book.id).order("created_at DESC") 

     if @reviews.blank? 
     @avg_review = 0 
     else 
     @avg_review = @reviews.average(:rating).round(2) 
    end 
    end 

    end 


    def new 
    @book = current_user.books.build 
    end 


    def edit 
    end 


    def create 
    @book = current_user.books.build(book_params) 

    respond_to do |format| 
     if @book.save 
     format.html { redirect_to @book, notice: 'Book was successfully created.' } 
     format.json { render :show, status: :created, location: @book } 
     else 
     format.html { render :new } 
     format.json { render json: @book.errors, status: :unprocessable_entity } 
     end 
    end 
    end 


    def update 
    respond_to do |format| 
     if @book.update(book_params) 
     format.html { redirect_to @book, notice: 'Book was successfully updated.' } 
     format.json { render :show, status: :ok, location: @book } 
     else 
     format.html { render :edit } 
     format.json { render json: @book.errors, status: :unprocessable_entity } 
     end 
    end 
    end 


    def destroy 
    @book.destroy 
    respond_to do |format| 
     format.html { redirect_to books_url, notice: 'Book was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    def set_book 
     @book = Book.find(params[:id]) 
    end 

    def book_params 
     params.require(:book).permit(:title, :author, :language, :year, :description, :total_pages, :rating, :image) 
    end 

私は関連するエラーが出ましたが、解決策のどれもが私の特定の問題に適合していないようです。これを引き起こしている可能性のある手掛かりはありますか?

+0

どのビューでフォームを表示していますか? –

+0

レールはエラーの原因となっている行を教えてくれますか? – davidhu2000

+0

エラーは<%= form_for @ book、html:{multipart:true} do | f | %> –

答えて

1

@bookがnilなのでエラーが発生しています。

あなたは@bookフォームを含むビューが利用できるようにする、対応するコントローラaction@book = Book.newを使用して@bookを初期化していることを確認します。

+0

コントローラのアクションで@books = Book.newを追加しましたが、それでも同じエラーが発生しました。 –

+0

@JawakarSelvaraj '@ book = Book.new'にする必要があります。なぜなら' @ book'ではなく '@ books'を使っているからです。 –

0

コントローラの動作で@book = Book.new

関連する問題