2012-06-11 4 views
0

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

Мой код:

routes.rb: 
    match "/homepage" => "users#access", :as => "store" 
    match "/homepage/:id" => "users#homepage", :as => "store" 

def access 
    @user = current_user 
    @user.update_attributes(:store => "0") 
    @user.save 
end 

def homepagestore 
    @user = current_user 
    @user.update_attribute(:id, user.store = :id) 
    @user.save 
end 
+0

Добро пожаловать в StackOverflow! Не забудьте перечислить ВСЕ полезные ответы, в том числе вопросы других. И проверьте/примите лучшие ответы на свои вопросы. –

+0

Могу ли я указать, что это кажется неожиданным поведением? Если я поеду на/homepage/5, и это мой магазин, если я случайно перейду на главную страницу, я потеряю доступ к моему магазину. Что вы пытаетесь сделать здесь? –

ответ

2

update_attribute обновляет запись в базе данных. Но он пропускает проверки проверки. update_attributes также обновляет (сохраняет) запись в базе данных. Он не пропускает проверку.

Итак:

  1. Вы должны использовать params[:id], как Sergio говорит
  2. Вы можете использовать update_attributes вместо, так как он не пропускает проверку достоверности
  3. Вам не нужен метод save, если вы используете update_attribute или update_attributes

Мои предложения:

def access 
    @user = current_user 
    @user.update_attributes(:store => "0") 
end 

def homepagestore 
    @user = current_user 
    @user.update_attributes(:store => params[:id]) 
end 

Добавлено update_attributes использует систему защиты массового назначения. Таким образом, вам нужно: сохранить поле в attr_accessible-вызове модели пользователя, чтобы он мог быть изменен. Или переопределите защиту, см. Документы update_attributes. Спросите, есть ли у вас больше вопросов.

+0

При применении ваших предложений возникают некоторые ошибки. Строка 14: @ user.update_attributes (: store => "0") [code] undefined method 'update_attributes 'для nil: NilClass app/controllers/users_controller.rb: 14: in' access' [/ code] – Yagiz

+0

Хорошо, это означает, что 'current_user' не задан правильно. Или у вас есть typo - update_attributes 'vs update_attributes –

+0

def current_user @current_user || = User.find (session [: user_id]) if session [: user_id] end – Yagiz

Смежные вопросы