【问题标题】:Rails 3 - NoMethodError for method 'new' in ControllerRails 3 - 控制器中方法“新”的 NoMethodError
【发布时间】:2012-04-19 00:04:02
【问题描述】:

我是 Rails 的新手,我正在尝试不使用脚手架,所以我会真正学习它。我查看了 railstutorial.org,但它与我的项目正在做的不同,所以我在另一个 rails 项目中生成了脚手架并复制编辑过的代码。

环境: Ubuntu 清醒, 红宝石 1.9.3p125, 轨道 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'

这是我的路线.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' %>

app/views/dream/_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

我已经用谷歌搜索了几个小时,但无法弄清楚这一点。如有任何帮助,我将不胜感激!

【问题讨论】:

  • 我认为这与我的模型有关。我在 Rails 控制台中收到此错误 1.9.3p125 :001 &gt; @dream = Dream.new NoMethodError: undefined method 'new' for Dream:Module

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


【解决方案1】:

我发现了问题:我使用rails new dream 创建了我的rails 项目,并且还有一个模型“Dream”。 Rails 关注的是应用程序类而不是模型类。当我创建模型并手动破解它时,我得到了一个关于 Dream 已经存在的错误(回想起来,这是一个可怕的想法)。这很令人沮丧,但我学到了很多!

【讨论】:

    【解决方案2】:

    尝试将控制器名称设为复数:

    root :to => 'dreams#new'
    

    更改路由配置文件时记得重启服务器。

    【讨论】:

    • 感谢您的回复!这给了我错误:uninitialized constant DreamsController我将我的 DreamController 重命名为 DreamsController,现在又遇到了原来的错误......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多