単純な問題だと思っていたことが、私に問題を引き起こしています。認証用の Devise/Omniauth を使用したアプリケーションがあります。新しいユーザーがサインアップしてログインすると、次のようないくつかの質問に (連続して) 案内されるようにします。
- 彼らはどんな飲み物が好きですか? (コーヒー、ドリンク、両方)
- 彼らにとってどの地域が便利ですか?
私のユーザー モデルには、3 つの preferred_neighborhood_# 属性 (preferred_neighborhood_one、preferred_neighborhood_two、preferred_neighborhood_three) と共に "preferred_beverage" 属性があります。
ユーザーがサインインしたときに、彼らが新しいユーザーかどうかを確認し、そうであれば、質問 1 のページに誘導したいと考えています。
<div class="center hero-unit">
<h2>What do you like to drink?</h2>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
<%= f.radio_button :preferred_beverage, 'Coffee', :checked => true %>
<%= label :preferred_beverage, 'Coffee' %>
<%= f.radio_button :preferred_beverage, 'Drink' %>
<%= label :preferred_beverage, 'Drink' %>
<%= f.radio_button :preferred_beverage, 'Both' %>
<%= label :preferred_beverage, 'Both' %>
<%= f.submit "Next", class: "btn btn-large btn-primary" %>
<% end %>
</div>
問題は、このフォームを送信すると、ユーザーの「preferred_beverage」属性が保存されているにもかかわらず、ユーザーへの変更を処理して root_path にリダイレクトしているように見えるデフォルトの Devise の「update」メソッドを適切に上書きできないことです。「preferred_beverage」の送信時に /app/views/neighborhood_survey/new.html.erb フォームに直接リダイレクトしたい。
デフォルトのDevise registrations_controllerを上書きするために使用しているこのregistrations_controller.rbの「更新」セクションに正確に何を入れる必要がありますか?
app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def create
super
session[:omniauth] = nil unless @user.new_record?
end
def update
end
private
def build_resource(*args)
super
if session[:omniauth]
@user.apply_omniauth(session[:omniauth])
@user.valid?
end
end
end
registrations_controller が Devise 登録コントローラーを次のように上書きしていることを確認するために、以下を完了しました。
routes.rb
devise_for :users, path_names: {sign_in: "login", sign_out: "logout"},
controllers: {omniauth_callbacks: "omniauth_callbacks", :registrations => "registrations"}
どんな入力でも大歓迎です!ありがとうございました。