更新迁移rails -mysqlite问题

时间:2011-06-23 09:25:13

标签: ruby-on-rails sqlite migration

我已更新了我的用户迁移,将“user”列更改为“username”,现在正在运行

User.find_by_id(session[:user_id]) 

服务器输出

SQLite3::SQLException: no such column: user: SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL ORDER BY user LIMIT 1

为什么它仍然试图通过“用户”进行排序?

感谢。

更新:

这是用户表

create_table "users", :force => true do |t|
    t.string   "username",                                                         :null => false
    t.string   "avatar"
    t.string   "hashed_password",                                                  :null => false
    t.string   "salt",                                                             :null => false
    t.string   "mail",                                                             :null => false
    t.integer  "login_count",                   :default => 0
    t.datetime "last_login",                    :default => '2011-06-23 08:59:41'
    t.datetime "last_request_at",               :default => '2011-06-23 08:59:41'
    t.string   "user_type",                     :default => "ruolo da definire"
    t.integer  "ammonizioni",                   :default => 0
    t.integer  "numero_segnalazioni_accettate", :default => 0
    t.integer  "numero_segnalazioni_risolte",   :default => 0
    t.datetime "created_at"
    t.datetime "updated_at"

更新2:如果它有帮助......我正在使用cancan,错误来自应用程序控制器上的方法“current_user”:

def current_user
  @current_user = User.find_by_id(session[:user_id]) 
end

问题的解决方案重新启用了一个新方法:

  def User.authenticate(user, password)
    if user = find_by_username(user)
      if user.hashed_password == encrypt_password(password, user.salt)
        user
      end
    end
  end

这一点很有效,直到我改变了迁移。第一个问题的错误重复:

SQLite3::SQLException: no such column: user: SELECT  "users".* FROM "users" WHERE "users"."username" IS NULL ORDER BY user LIMIT 1

我该如何修改?

if user = User.find_by_username(user)

回答迈克:

  • session[:user_id]为空,因为我没有登录
  • 你的解决方案,对于第二个问题,会产生同样的错误!

1 个答案:

答案 0 :(得分:-1)

这应该有效

 def current_user
      @current_user ||= User.find(session[:user_id]) if session[:user_id]
 end

或者,

 def current_user
      @current_user ||= User.find_by_id(session[:user_id]) if session[:user_id]
 end

需要注意的重点是,我正在检查session[:user_id]是否为空。如果您查看SQL错误...WHERE "users"."id" IS NULL ... 确实为空。

<强>更新

  

是会话[:user_id]为空,因为我没有登录

这就是为什么我以if session[:user_id]结束以确保首先存在这样的会话。

更新#2

要证明.find_by_username(user.username)有效且只是传入user我只是尝试过测试

ruby-1.8.7-p334 :003 > User.find_by_name(User.all.last)
 => nil

当然,正如预期的那样,User.find_by_name(User.all.last.name)有效:)