Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 更新迁移rails-mysqlite问题_Ruby On Rails_Sqlite_Migration - Fatal编程技术网

Ruby on rails 更新迁移rails-mysqlite问题

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的列,现在正在运行

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