0

ユーザー モデルには 1 つの user_profile があります。
デバイスをインストールしたところ、正常に動作しています。

registrations_controller.rb を作成しましたが、'create'、'after_update_path_for(resource)'、'edit' アクションがあります。

user_profile のネストされた列にデフォルト値として '45' を入力するようにしたい場合、登録コントローラーにどのようにコーディングできますか?

「保存/または新規作成」という別のアクションを実行する必要がありますか? 、そしてこれを書きますか?

@user.user_profile.language_id = '45'

4

1 に答える 1

1

私はいくつかのテストを行っていました。コールバックを使用することをお勧めしますが、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関係を使用しました。

于 2012-12-13T04:58:49.193 に答える