2013-07-10 7 views
0

Эй i've получил еще одну проблему;)неопределенный метод `model_name» для NilClass: Класс НО IST инициализируется

Когда я пытаюсь создать новую книгу в мое приложение всегда говорит

undefined method "model_name" for NilClass:Class

я узнал, что он должен быть неинициализированными парами в form_for функции ... Вот мой код:

NoMethodError in Books#new

Showing /app/views/books/_form.html.erb where line #1 raised:

undefined method `model_name' for NilClass:Class 
    Extracted source (around line #1): 

    1: <%= form_for(@book) do |f| %> 
    2: <% if @book.errors.any? %> 
    3:  <div id="error_explanation"> 
    4:  <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2> 

Контроллер:

#GET /books/new 
    #GET /books/new.json 
    def new 
    @users = User.find(:all) 
    @book = Book.new 
    1.times{ @book.chapters.build } 
    @book.users = [current_user] 
    respond_to do |format| 
     format.html #new.html.erb 
     format.json { render json: @book } 
    end 
    end 

Я не знаю, почему это должно быть неинициализированным, она работала должным образом, прежде чем я изменил некоторые отношения между книгами и пользователями, но я там shoudn't быть провал или?

EDIT:

приложение/просмотров/книги/new.html.erb:

<h1>New book</h1> 

    <%= render 'form' %> 

    <%= link_to 'Back', books_path %> 

И Model:

class Book < ActiveRecord::Base 
      attr_accessible :abstract, :status, :titel, :user_tokens, user_ids,  :chapters_attributes 

    has_and_belongs_to_many :users 
    attr_reader :user_tokens 

    has_many :chapters, :dependent => :destroy, :autosave => true, :order => 'slot' 

    validates :title, :presence => true 

    accepts_nested_attributes_for :chapters, :allow_destroy => true 

    after_initialize :init 
    def init 
     self.status = false if self.status? 
    end 

    def user_tokens=(ids) 
     self.user_ids = ids.split(",") 
    end 

    end 
    end 
+0

Что приложение/просмотров/книги/new.html.erb выглядеть как? –

+0

Можете ли вы также показать, как выглядит ваша модель книги? – dasnixon

+0

Интересно, является ли это моделью. Вы всегда можете использовать отладчик и проверять, как он выглядит, пока он не отображает – smile2day

ответ

0

Ваш парциальное не будет знать переменные экземпляра, заданные в контроллере. Вы должны передать их как местные жители, когда вы оказываете парциальное

render :partial => "form", :locals => {:book => @book} 

И в вашем частичном использовании book вместо @book

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

Я не получил ваше решение для работы, где мне нужно вставить строку для частичного рендеринга точно? – Enno

+0

В ваших книгах/new.html.erb. строка 2 – usha

+0

, тогда я получил эту ошибку: неопределенная локальная переменная или метод 'book 'для # <# <Класс: 0x462cbd0>: 0x28c1e68> – Enno