Ruby on Rails未定义方法find_by_email

时间:2014-04-21 10:08:27

标签: ruby-on-rails ruby methods controller

我有一个奇怪的问题,我似乎无法find_by_email在我的项目中工作,这是我的控制器中我得到异常的部分。我正在使用rails 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

我无法阻止代码出现任何问题,但仍然会获得操作控制器:异常被抓住:

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

我想知道是否还有其他方法可以解决这个问题?我已尝试在rails控制台中手动使用该方法但遇到同样的问题。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

Rails 4.1.0将按方法

折旧自定义查找

使用

 User.find_by email: params[:email]

迟早你必须改变它。

参考

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