我在书籍中得到NoM​​ethodError#在我的ruby中添加

时间:2013-01-20 11:40:50

标签: ruby-on-rails ruby ruby-on-rails-3

我对Ruby非常陌生,刚刚开始学习大约4周前。我现在正在建造一些非常小的东西。一个表单,其中包含一些字段,用于存储有关书名的数据输入,然后将其吐出到表单下方的列表中,这是我到目前为止所得到的:

books_controller.rb

    class BooksController < ApplicationController
  def add
    @book_name = params[:book_name]
  end

  def sign_in
        @book_name = params[:book_name]
    unless @book_name.blank?
        @book = Book.create({:book_name => @book_name})
    end
        @books = Book.all
  end
end

这是创建控制器的地方。我觉得很直接。

这是数据库创建者的事情:

class CreateBooks < ActiveRecord::Migration
  def change
    create_table :books do |t|
      t.string :book_name
      t.timestamps
    end
  end
end

然后我们有app / models / book.rb:

class Book < ActiveRecord::Base
  attr_accessible :book_name
end

然后我有一个添加模板,其中添加了书名并创建了列表(这是我收到错误的页面)

<p>Find me in app/views/books/add.html.erb</p>

<h2>Recent book: <%= @book_name %> and the Author is: <%= @book_author %></h2>
<%= form_tag :action => 'add' do %>
<p>Book name: <%= text_field_tag 'book_name', @book_name %></p>
<%= submit_tag 'Add Book' %>
<% end %>

<p>Book list:</p>
<ul>
<% @books.each do |book| %>
<li><%= book.book_name %></li>
<% end %>
</ul>
<hr>
<%= debug(params) %>
<%= debug(assigns) %>

有人碰巧知道我为什么会收到这个错误,我会在下面显示完整的错误:

Books#add中的NoMethodError 未定义的方法`each'代表nil:NilClass

任何帮助都会很棒。

干杯, 标记

1 个答案:

答案 0 :(得分:4)

Book#add正在调用未定义的方法。 #add定义了BooksController,而不是Book

不幸的是,这只是几个问题中的一个。您的代码表明对Rails如何工作的不完全理解,这对于刚刚开始的人来说并不是非典型的。

我建议您将Rails研究重点放在:

  • HTTP请求/响应周期
  • 实例变量,尤其是控制器中的寿命和范围
  • CRUD方法(基本的Rails约定)
  • MVC架构以及控制器和模型之间的关系