1

私はRailsが初めてで、足場なしでやろうとしているので、本当に学びます. railstutorial.org を調べましたが、私のプロジェクトが行っていたものとは異なっていたので、別の Rails プロジェクトでスキャフォールディングを生成し、コードをコピー編集しました。

環境: Ubuntu Lucid、ruby 1.9.3p125、rails 3.2.1

アプリケーションのルートhttp://localhost:3000/に移動すると、このエラーが発生します

NoMethodError in DreamController#new

undefined method `new' for Dream:Module
Rails.root: /vagrant/dream

Application Trace | Framework Trace | Full Trace
app/controllers/dream_controller.rb:5:in `new'

ここに私のroutes.rbがあります

Dream::Application.routes.draw do
  resources :dreams do
    resources :interpretations
  end
  root :to => 'dream#new'
end

これが私のコントローラーです:

class DreamController < ApplicationController
  def new
    @dream = Dream.new

    respond_to do |format|
      format.html # new.html.erb
    end
  end

  def create
    @dream = Dream.new(params[:dream])

    respond_to do |format|
      if @dream.save
        format.html { redirect_to @dream, notice: 'Dream was successfully created.' }
      else
        format.html { render action: "new" }
      end
    end
  end
end

app/views/dream/new.html.erb は次のとおりです。

<%= render 'form' %>

アプリ/ビュー/夢/_form.html.erb:

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

      <ul>
      <% @dream.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :text %><br />
    <%= f.text_area :text %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

これが私のモデルです(2つの別々のファイルにあります):

class Dream < ActiveRecord::Base
  validates :text, :presence => true
  has_many :interpretations
end

class Interpretation < ActiveRecord::Base
  validates :text, :presence => true
  belongs_to :dream
end

私は数時間グーグルで検索しましたが、これを理解できません。助けていただければ幸いです!

4

2 に答える 2

1

私は問題を発見しました.Railsプロジェクトを作成しrails new dream、モデル「夢」も持っていました. Rails は、モデル クラスではなく、アプリケーション クラスを見ていました。モデルを作成したときに、Dream が既に存在するというエラーが表示され、それを回避する方法を手動でハックしました (振り返ってみると、恐ろしい考えでした)。これは非常にイライラしましたが、かなりのことを学びました!

于 2012-04-25T01:09:57.397 に答える
0

コントローラー名を複数形にしてみてください:

root :to => 'dreams#new'

ルーティング構成ファイルを変更するときは、サーバーを再起動することを忘れないでください。

于 2012-04-19T00:12:58.913 に答える