我已更新了我的用户迁移,将“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]
为空,因为我没有登录答案 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]
结束以确保首先存在这样的会话。
要证明.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)
有效:)