我对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
任何帮助都会很棒。
干杯, 标记
答案 0 :(得分:4)
Book#add
正在调用未定义的方法。 #add
定义了BooksController
,而不是Book
。
不幸的是,这只是几个问题中的一个。您的代码表明对Rails如何工作的不完全理解,这对于刚刚开始的人来说并不是非典型的。
我建议您将Rails研究重点放在: