2016-08-31 132 views
0

我收到此錯誤與我的書的形式在軌:第一個參數不能包含零或爲空

形式第一個參數不能包含零或爲空

形式

<%= 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是零。

確保你在相應的控制器action因此使用@book = Book.new@book可包含窗體視圖初始化@book

+0

我在控制器操作中添加了@books = Book.new,但仍然收到相同的錯誤。 –

+0

@JawakarSelvaraj它應該是'@book = Book.new',因爲你在使用'@ book'而不是'@ books'的形式。 –

0

初始化@book = Book.new控制器中的動作

相關問題