【问题标题】:Ruby on Rails Undefined method find_by_emailRuby on Rails 未定义方法 find_by_email
【发布时间】:2014-04-21 10:08:27
【问题描述】:

我有一个奇怪的问题,我似乎无法 find_by_email 在我的项目中工作,这是我遇到异常的控制器部分。我正在使用导轨4.0.3

def create
    user = User.find_by_email(params[:email])
    if user && user.authenticate(params[:password])
      session[:user_id] = user.id
      redirect_to root_url, notice: "Welcome back!"
    else
      flash.now.alert = "Email or password is invalid"
      render "new"
    end
end

我无法阻止代码有任何问题,但仍然收到 Action Controller: Exception catched:

NoMethodError in SessionsController#create
app/controllers/sessions_controller.rb:6:in `create'
undefined method `find_by_email' for #<Class:0x007fbdd62179b0>

我想知道是否有其他方法可以解决此问题?我尝试在 Rails 控制台中手动使用该方法,但收到了同样的问题。

【问题讨论】:

  • 您使用的是哪个版本的 Rails?
  • User 表有电子邮件字段吗?
  • 确保您的用户表中有email 字段。
  • 对于 Rails4,使用 find_by(:email =&gt; params[:email])
  • @Santosh 我正在使用 Rails 4.0.3

标签: ruby-on-rails ruby methods controller


【解决方案1】:

正如许多人所建议的,这是由于 users 表中缺少 email 列。

如果您尚未运行迁移,请执行此操作。

【讨论】:

    【解决方案2】:

    在用户表中添加电子邮件字段

    Rails 4.1.0 将通过方法折旧自定义查找

    使用

     User.find_by email: params[:email]
    

    你迟早要改变它。

    参考

    http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_by

    【讨论】:

    • 这只是显示弃用消息,但仍然有效,这不是操作问题。
    • 在用户表中添加电子邮件字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2016-12-15
    • 2019-10-31
    • 2018-07-06
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多