【问题标题】:Rails: Undefined method 'downcase_email'Rails:未定义的方法'downcase_email'
【发布时间】:2018-04-04 10:30:18
【问题描述】:

有一些类似的问题是这样的:

#<User:0x00007fa0353b2518> 的未定义方法“downcase_email”

(对不起,我不知道怎么形容……) 错误:

NoMethodError in UsersController#create

用于#的未定义方法`downcase_email' 提取的源代码(在第 23 行附近): 26 @user = User.new(user_params) 如果@user.save @user.send_activation_email flash[:info] = "请检查您的电子邮件以激活您的帐户。"

当我进入注册页面时,首先我想创建一个新帐户。 然而,它失败了。并且发生了错误。

好的...这里是user.rb

class User < ApplicationRecord
    attr_accessor :remember_token, :activation_token, :reset_token
    before_save :downcase_email
    before_create :create_activation_digest

    class << self
        def send_activation_email
            UserMailer.account_activation(self).deliver_now 
        end

        private
        def downcase_email
            self.email=email.downcase
        end
        def create_activation_digest
            self.activation_token=User.new_token
            self.activation_digest=User.digest(activation_token)
        end   
    end  
end

这是用户控制器

def create
    @user = User.new(user_params)
    if @user.save
      @user.send_activation_email
      flash[:info] = "Please check your email to activate your account."
      redirect_to root_url
    else
      render 'new' 
    end  
end

并且错误似乎针对@user.save。 请...帮帮我

【问题讨论】:

  • 你忘了告诉我们错误是什么。
  • 另外,请花费一些精力并正确格式化代码(缩进两个空格,空行上没有奇怪的字符)。正如现在发布的那样,它不是有效的红宝石。
  • 我不知道如何显示错误。
  • 什么意思,把它加到问题里,而不是cmets。
  • class &lt;&lt; self 在那里做什么?

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

简单地使用

before_save {self.email = email.downcase}

并且在添加上述行后,您的模型上不需要此方法,如

def downcase_email
    self.email=email.downcase
end

当email为nil时会显示

NoMethodError: nil:NilClass 的未定义方法 `downcase'

nil.downcase
# NoMethodError: undefined method `downcase' for nil:NilClass

"As".downcase
#=> "as"

如果您不同意像上面那样进行更改,那么请像下面那样重新格式化模型

class &lt;&lt; self 是什么,你可以删除这个类并像这样重新格式化你的模型

class User < ApplicationRecord
    attr_accessor :remember_token, :activation_token, :reset_token
    before_save :downcase_email
    before_create :create_activation_digest

    def send_activation_email
        UserMailer.account_activation(self).deliver_now 
    end

    private
    def downcase_email
        self.email = email.downcase
    end
    def create_activation_digest
        self.activation_token = User.new_token
        self.activation_digest = User.digest(activation_token)
    end   
end

【讨论】:

  • 啊,我明白了。他放错了方法。感谢您重新格式化他的代码。 :) 看来你一直都是对的。 ?
猜你喜欢
  • 1970-01-01
  • 2014-04-04
  • 2013-02-05
  • 1970-01-01
  • 2013-08-30
  • 2015-10-03
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多