0

よろしくお願いします。私はこれに対する答えを得るためにインターネットを見回していましたが、何も見つからなかったので、ここに質問があります。

私は、登録をカスタマイズしたことを工夫してユーザー登録プロセスを行っています。

 <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :name %><br />
  <%= f.email_field :name, :autofocus => true %></div>

  <div><%= f.label :email %><br />
  <%= f.email_field :email, :autofocus => true %></div>

  <div><%= f.label :password %><br />
  <%= f.password_field :password %></div>

  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></div>


<div>Teaching:<%= f.label :language_ids %><br />
<%= collection_select('user', 'language_ids', @languages, :id, :name, {}, {:included_blank => false,:multiple => true } ) %>
</div>

<div>Learning:<%= f.label :language_ids %><br />
<%= collection_select('user', 'language_ids', @languages, :id, :name, {}, {:included_blank => false,:multiple => true } ) %>
</div>

私のコントローラーでは現在、このように見えます

def create
    @languages = Language.all
    build_resource(sign_up_params)

    if resource.save
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?
        sign_up(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_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

ここで、fluency と呼ばれる中間テーブル/モデルのメタデータ フラグを切り替えるために設定する必要があるフィールドがあります。基本的に、データが Learning マルチセレクトからのものである場合は 0 に設定し、データが Teaching マルチセレクトからのものである場合は 1 に設定する必要があります。現在、そのメタデータを切り替えずに挿入するだけです。

あちこち探していますが、何も見つかりません。

ありがとう!

4

1 に答える 1

0

リソースを保存する前に、パラメーターを抽出します。次に、Fluencyレコードの作成と保存をresourceブロックActiveRecord::Base.transactionにラップして、これらのレコードのいずれかの永続化に失敗した場合、すべてロールバックします。

このようなもの:

  def create
    @languages = Language.all
    build_resource(sign_up_params)

    ActiveRecord::Base.transaction do
      create_fluency_records(sign_up_params[:fluency_fields]

      result = resource.save!
    end

    if result
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?
        sign_up(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_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

fluency_fieldsリクエスト パラメータ内で呼び出されるハッシュで「学習」値と「教育」値を渡すように、フォームを変更する必要があることに注意してください。

于 2013-11-13T20:26:07.560 に答える