我是Rails的新手,我试图在没有脚手架的情况下这样做,所以我真的会学习它。我查看了railsstutorial.org,但它与我的项目所做的不同,所以我在另一个rails项目中生成了脚手架,并且复制了编辑过的代码。
环境: Ubuntu Lucid, 红宝石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
我现在用Google搜索了几个小时,无法解决这个问题。我很感激任何帮助!
答案 0 :(得分:1)
我发现了问题:我用rails new dream
创建了我的rails项目,并且还有一个模型'Dream'。 Rails正在查看应用程序类而不是模型类。当我创建模型时,我得到了一个关于Dream已经存在的错误,并且用手攻击了我的方式(回想起来,这是一个可怕的想法)。这非常令人沮丧,但我学到了很多东西!
答案 1 :(得分:0)
尝试将控制器名称复数形式:
root :to => 'dreams#new'
并记住在更改路由配置文件时重新启动服务器。