我認爲會是一個簡單的問題,給我一些麻煩。我有一個與Devise/Omniauth進行認證的應用程序。當新用戶註冊並登錄時,我希望他們被引導到幾個問題(連續)詢問:用設計更新方法覆蓋redirect_to行爲
- 他們喜歡什麼飲料? (咖啡,喝,都)
- 什麼社區方便他們?
我的用戶模型有一個「preferred_beverage」屬性以及三個preferred_neighborhood_#屬性(preferred_neighborhood_one,preferred_neighborhood_two,preferred_neighborhood_three)。
當用戶登錄,我要檢查,如果他們是一個新的用戶時,如果是這樣,他們引導到一個頁面,問題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」屬性正在保存,我也無法正確覆蓋默認的Devise「update」方法,這似乎是處理對用戶的任何修改並重定向到root_path。我想在提交'preferred_beverage'後直接重定向到我的/app/views/neighborhood_survey/new.html.erb表單。
我需要將這個registrations_controller.rb的「更新」部分放到什麼位置,我正在使用它來覆蓋默認的Devise registrations_controller?
應用程序/控制器/ 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是用下面的覆蓋設計註冊控制器:
routes.rb
devise_for :users, path_names: {sign_in: "login", sign_out: "logout"},
controllers: {omniauth_callbacks: "omniauth_callbacks", :registrations => "registrations"}
任何輸入的感謝! 謝謝。
謝謝凱爾。這不僅僅是登錄後的那一刻,這很重要。它是在重新定向填充飲料的表單之後。在提交飲料之後,用戶被更新並且應該有另一個重定向到顯示第二個問題(鄰居)的頁面。有什麼想法嗎?謝謝! – keypulsations 2012-07-27 21:31:38
我會把這些問題提交給一個單獨的表格,所以你不必擔心設計。當你把更新放在更新行爲中時發生了什麼? – 2012-07-27 22:06:33