Ruby on rails 更新迁移rails-mysqlite问题
我已经更新了我的用户迁移,更改了用户名为user的列,现在正在运行Ruby on rails 更新迁移rails-mysqlite问题,ruby-on-rails,sqlite,migration,Ruby On Rails,Sqlite,Migration,我已经更新了我的用户迁移,更改了用户名为user的列,现在正在运行 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"
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,错误来自应用程序控制器上当前用户的方法:
def current_user
@current_user = User.find_by_id(session[:user_id])
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)
回答迈克:
是会话[:user_id]为空,因为我未登录
对于第二个问题,您的解决方案会产生相同的错误!
这应该行得通
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
需要注意的重要一点是,我正在检查会话[:user_id]是否为null。如果查看SQL错误…其中users.id为NULL。。。它确实是空的
更新
是会话[:user_id]为空,因为我未登录
这就是为什么我以if session[:user_id]结束,以确保这样的会话首先存在
更新2
为了证明这一点,find_by_usernameuser.username有效,只需传入用户,我就尝试了一个测试
ruby-1.8.7-p334 :003 > User.find_by_name(User.all.last)
=> nil
当然,正如预期的那样,User.find_by_nameUser.all.last.name可以工作:您可以使用SQLite查看器验证迁移是否确实将列重命名为“username”?您还可以检查schema.rb文件以获得Roy的建议,如果您在Rails 3中,还可以执行rake db:migrate:status。in schema.rb列是User。我能做些什么来改变它?手动操作不起作用!请用用户表的模式更新帖子好吗?对不起,schema.rb列是username。。。是我的错。顺便说一下,现在我更新了我的帖子。。。我在这一行也遇到了同样的问题:如果user=find_by_usernameuser[…],你就不能这么做。find_by_*是一种需要在相关模型上调用的方法。您可以执行User.find_by_usernameJimmy Page-您不能在那里传递用户对象。我建议您。这不是整个对象,而是从函数authenticate session传递的用户名。\u controller:User.authenticateparams[:username],params[:password]@Massimo,返回并查看您的定义。那里的用户与user.username不同。试试看,你会明白的。
ruby-1.8.7-p334 :003 > User.find_by_name(User.all.last)
=> nil