私はいくつかのテストを行っていました。コールバックを使用することをお勧めしますが、Devise の RegistrationsController のアクションをオーバーライドすることもできます。私はこのスレッドに従いました:デバイス登録コントローラーとコントローラーのコードをオーバーライドしますhttps://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb (sign_upの代わりにsign_inを使用していることを確認してください-私はRails 3.2.8で作業しています)
そして、これはケースの編集を含むコードです:
class RegistrationsController < Devise::RegistrationsController
def new
super
end
def create
build_resource
resource.build_user_profile
resource.user_profile.language_id = 45
if resource.save
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
expire_session_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
end
def update
super
end
end
そして、投稿の答えが言ったように、私は次のようにルートを残します:
devise_for :users, :controllers => {:registrations => "registrations"}
has_one関係を使用しました。