Обновление миграции rails -mysqlite проблема - PullRequest
0 голосов
/ 23 июня 2011

Я обновил миграцию пользователя, изменив столбец "пользователь" на "имя пользователя", и теперь при запуске

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

Почему он все еще пытается упорядочить по "user "??

спасибо.

ОБНОВЛЕНИЕ:

вот таблица пользователя

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 голосов
/ 23 июня 2011

Это должно работать

 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 ..., то будет действительно нулем.

Обновление

yes сеанс [: 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) работает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...