Во-первых, я новичок в 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)
# 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?"