【问题标题】:NoMethodError in Users#index用户中的 NoMethodError#index
【发布时间】:2015-01-24 05:06:00
【问题描述】:

以下应用程序有问题,我一直在 RailsCasts 的 Rails 3 中进行第 #211 集验证,但是当我尝试添加类 EmailFormatValidator 时触发错误

NoMethodError in Users#index

Showing /home/fernando/Validations/store/app/views/users/index.html.erb where line #12 raised:

undefined method `each' for nil:NilClass
Extracted source (around line #12):

9:     <th></th>
10:   </tr>
11: 
12: <% @users.each do |user| %>
13:   <tr>
14:     <td><%= user.name %></td>
15:     <td><%= user.email %></td>
Rails.root: /home/fernando/Validations/store

models/user.rb

class User < ActiveRecord::Base
  validates :email, :presence => true, :uniqueness => true, :email_format => true
end

lib/email_format_validator.rb

class EmailFormatValidator < ActiveModel::EachValidator
  def validate_each(object, attribute, value)
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
      object.errors[attribute] << (options[:message] || "is not formatted properly") 
    end
  end
end

/controller/user.rb

class UsersController < ApplicationController
  # GET /users
  # GET /users.json
  def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @users }
    end
  end

  # GET /users/1
  # GET /users/1.json
  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end

# GET /users/new # 获取 /users/new.json 定义新 @user = User.new

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @user }
end

结束

# GET /users/1/edit 定义编辑 @user = User.find(params[:id]) 结束

# POST /用户 # 发布 /users.json 定义创建 @user = User.new(params[:user])

respond_to do |format|
  if @user.save
    format.html { redirect_to @user, notice: 'User was successfully created.' }
    format.json { render json: @user, status: :created, location: @user }
  else
    format.html { render action: "new" }
    format.json { render json: @user.errors, status: :unprocessable_entity }
  end
end

结束

#PUT /users/1 # PUT /users/1.json 定义更新 @user = User.find(params[:id])

respond_to do |format|
  if @user.update_attributes(params[:user])
    format.html { redirect_to @user, notice: 'User was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @user.errors, status: :unprocessable_entity }
  end
end

结束

# 删除 /users/1 # 删除 /users/1.json 定义破坏 @user = User.find(params[:id]) @user.destroy

respond_to do |format|
  format.html { redirect_to users_url }
  format.json { head :no_content }
end

结束 结束

单击一次时出现此错误 用户控制器中的参数错误#index

Unknown validator: 'EmailFormatValidator'
Rails.root: /home/fernando/Validations/store

【问题讨论】:

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


    【解决方案1】:

    请在 app 文件夹中创建验证器目录。

    您的文件名应类似于验证器文件夹中的 email_format_validator.rb

    #app/model/user.rb
    class User < ActiveRecord::Base
      validates :email, :presence => true, :uniqueness => true, :email_format => true
    end
    

    请从“lib 文件夹”中删除此验证器文件。

    Devise为电子邮件编写Rails验证的简单方法

    更简单validates :email, :presence =&gt; true, :format =&gt; Devise.email_regexp

    【讨论】:

    • 还有一件事——之后需要重新启动服务器,以获取新的子文件夹。
    猜你喜欢
    • 1970-01-01
    • 2015-07-09
    • 2014-02-07
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多