Получение нулевого значения параметра в контроллере при срабатывании маршрута MVC

Во-первых, я новичок в MVC, поэтому, пожалуйста, извините за вопрос, если он базовый.

Я использую собственный маршрут для создания следующего URL-адреса ( http: // mysite / subscriber / 12345 ), где 12345 - номер абонента. Я хочу, чтобы он выполнял действие ShowAll в контроллере Subscriber . Мой маршрут запускается и использует отладчик маршрута Фила , когда я передаю указанный выше URL-адрес, отладчик маршрута показывает идентификатор как 12345. Мой контроллер принимает int как subscriberID . Когда горит, s идентификатор facebook.

Я хочу разрешить пользователю отключить его учетную запись facebook. Сделайте это, мне нужно установить для этого атрибута значение nil.

В настоящее время я вижу 2 способа сделать это

Первый способ: создать настраиваемое действие и связать его

# app/controllers/users_controller.rb
def unlink_facebook_account
  @user = User.find params[:id]
  # Authorization checks go here
  @user.facebook_uid = nil
  @user.save
  # Redirection go here
end

# config/routes.rb
ressources :users do
  get 'unlink_fb', :on => :member, :as => unlink_fb
end 

# in a view
= link_to "Unlink your facebook account", unlink_fb_path(@user)

Второй способ: создать форму для существующего update action

# app/views/user/_unlink_fb_form.html.haml
= form_for @user, :method => "post" do |f|
  = f.hidden_field :facebook_uid, :value => nil
  = f.submit "Unlink Facebook account"

Я не большой поклонник ни того, ни другого.

  • В первом случае я должен добавить новое действие для того, что контроллер обновлений уже может сделать.

  • Во втором я не могу установить для facebook_uid значение nil без настройки действия обновления, и я не могу ссылку вместо кнопки без добавления JavaScript.

Тем не менее, что вы порекомендуете как лучшее и наиболее элегантное решение для этого контекста? Я пропустил третью альтернативу?

Решение (предложено Абдуллой Джибали)

Используйте ссылку на действие обновления, с атрибутом для обновления в качестве параметров; и обрабатывать случай, когда для атрибута установлено значение 0

= link_to "Unlink your facebook account", 
          user_path(@user, 
                    :user => { :facebook_uid => 0}),
          :method => :put, 
          :confirm => "Are you sure?"

31
задан tereško 8 February 2014 в 10:26
поделиться