-1

私は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 の NoMethodError#nil:NilClass の未定義メソッド「each」を追加

これについては、どんな助けも素晴らしいでしょう。

乾杯、マーク

4

1 に答える 1

4

Book#add未定義のメソッドを呼び出しています。 ではなく#addで定義されています。BooksControllerBook

残念ながら、これはいくつかの問題の 1 つにすぎません。あなたのコードは、Rails がどのように機能するかを完全に理解していないことを示唆しています。

Rails の学習に集中することをお勧めします。

  • HTTP リクエスト/レスポンス サイクル
  • インスタンス変数、特にコントローラーの寿命とスコープ
  • CRUD メソッド (基本的な Rails 規則)
  • MVC アーキテクチャとコントローラーとモデルの関係
于 2013-01-20T12:50:00.673 に答える