0

我已经盯着这个看了一段时间,谷歌并没有提供太多帮助,所以我向你们寻求帮助。这应该是一个非常简单的修复。

代码的目标是从注册字段中获取电子邮件地址并将其放入数据库中。

我认为我需要的大部分内容都在那里,但我收到了这个错误:

undefined method model_name for NilClass:Class

我的 home.html.erb 文件包含以下内容:

    <%= form_for(@signup) do |f| %>
        <div class="field">
            <%= f.label :email %><br />
            <%= f.text_field :email %>
        </div>

        <div class="actions">
            <%= f.submit "Enter" %>
        </div>
    <% end %>

该模型包含以下内容:

class Signup < ActiveRecord::Base

  attr_accessible :email
     email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
     validates(:email, :presence => true,
                    :length => {:maxiumum => 40},
                    :format => {:with => email_regex})

end

控制器包含:

class SignupController < ApplicationController

  def show
  end

  def new
    @signup = Signup.new
  end

  def create
    @signup = Signup.new(params[:id])
    if @signup.save
    else
      render 'new'
    end
  end

end
4

2 回答 2

2

问题很可能是因为您在 form_for 中使用的实例变量未设置为 ActiveRecord 对象。看来您在“新”操作中正确设置了它,但是由于您提到表单位于“home.html.erb”中,因此尚不清楚您是否正在呈现正确的模板?

无论哪种方式,请确保您在 form_for 中使用的任何内容都设置为有效的 ActiveRecord 对象,您的问题可能会得到解决。

此外,您可能希望更改创建操作以使用表单中的所有参数:

@signup = Signup.new(params[:signup])
于 2012-05-05T02:10:22.927 回答
1

将此添加到home页面控制器中的操作:

@signup = Signup.new

错误的原因是您@signup在表单中使用,但您没有在show控制器操作中定义它。

于 2012-05-05T02:04:47.057 回答