Ruby On Rails - Установка значений объекта - PullRequest
1 голос
/ 09 февраля 2011

Я создал приложение Ruby on Rails, в котором пользователи могут входить и выходить из системы, а также создавать новые учетные записи.У пользователей есть целое число "rankid", и в зависимости от их ранга есть разные разрешения на сайте.

Я хочу, чтобы пользователи могли перейти на следующий ранг, перейдя на ROOTURL/upgrade - так в моем маршрутах.У меня есть следующее:

map.connect '/upgrade', :controller => 'users', :action => 'upgrade'

, который использует следующий метод в моем контроллере пользователя:

def upgrade
  @CurrentID = session[:user_id]
  @user = User.find(@CurrentID)

  if @user.rankid = 0
    @user.rankid = 1
    redirect_to root_url, :notice => "Upgraded to VIP!"
    return
  end
  if @user.rankid = 1
    @user.rankid = 2
    redirect_to root_url, :notice => "Upgraded to Admin!"
    return
  end
end

Я устанавливаю аутентификацию, используя это руководство не понимаю, почему это не сработает.Извините, если это действительно глупая ошибка - я новичок в Ruby и Rails.

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

Во-первых, вашим if операторам необходим двойной знак равенства, который будет сравнивать @user.rankid с 0 вместо того, чтобы устанавливать его на 0.

if @user.rankid == 0

Далее, вы никогда не сохраняете своих пользователей после их обновления. Наконец, используйте elsif на вашем втором блоке. В противном случае, пользователь будет повышен до VIP, а затем немедленно обновлен до администратора. Используя else / elsif, вам не нужно жестко кодировать оператор возврата.

Полный код:

def upgrade
  @user = User.find(session[:user_id])
  if @user.rankid == 0
    @user.update_attributes(:rankid => 1)
    redirect_to root_url, :notice => "Upgraded to VIP!")
  elsif @user.rankid == 1
    @user.update_attributes(:rankid => 2)
    redirect_to root_url, :notice => "Upgraded to Admin!"
  end
end
0 голосов
/ 09 февраля 2011

Настраиваете ли вы сеанс [: user_id] до того, как ваш пользователь выполнит действие по обновлению Users #, то есть войдите в систему?

Вы также можете пропустить дополнительную переменную и просто использовать

@user = User.find(session[:user_id])

Но прежде чем использовать результат, убедитесь, что вы действительно получили что-то полезное

if @user
   @user.rankid += 1;
   @user.save # Maybe even error check this
   case @user.rankid
   when 1
     notice = "Upgraded to VIP!"
   when 2
     notice = "Upgraded to Admin!"
   else
     notice = "r00t!"
   end
   redirect_to root_url, :notice => notice
   return
else 
   # some problem with your user or missing session[:user_id]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...