「Devise User」と「Influencer」という2つのモデルがあります。影響者はユーザーであるため、ユーザー(dbの観点から)が必要です。ユーザーは複数のことができます。したがって、私たちはインフルエンサーでなくてもユーザーにサインアップできるようにしたいので、インフルエンサーとしてサインアップするときにユーザーにサインアップしたいと考えています。異なるフォームとコントローラからDeviseユーザを作成する - Ruby on Rails
私はそうのような形式があります。それは、レンダリングすることができるように私たちは、ApplicationHelperと '新しい' 方法を変更した
influencers/new.html.erb
<%= form_for @influencer do |i| %>
<%= i.fields_for(resource, as: resource_name, url: registration_path(resource_name)) do |u| %>
<div id="registration_fields">
<%= render 'devise/registrations/registration_fields', f: u %>
</div>
<% end %>
<div class='field'>
<%= i.label :twitter_handle %><br/>
<%= i.text_field :twitter_handle %>
</div>
<div class='field'>
<%= i.label :short_bio %><br/>
<%= i.text_area :short_bio %>
</div>
/views/devise/registrations/_registration_fields
<%= devise_error_messages! %>
<div class="field">
<%= f.label :first_name %> <br />
<%= f.text_field :first_name %>
</div>
<div class="field">
<%= f.label :last_name %> <br />
<%= f.text_field :last_name %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %>
</div>
<div class="field">
<%= f.label :password %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %><br />
<%= f.password_field :password, autocomplete: "off" %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "off" %>
</div>
をこのDeviseフォームは問題なし。残念ながら、私たちは、InfluencersControllerのための「作成」メソッドを適切に作成する方法について固執しています。
これは、我々が受け取るハッシュです:
Parameters: {..., "influencer"=>{"user"=>{"first_name"=>"buddy", "last_name"=>"king", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "twitter_handle"=>"@bdking", "short_bio"=>"None"}, "commit"=>"Join as influencer"
基本的に、我々は我々がインフルエンサーの情報を処理しながら、ユーザー情報を処理するために考案したいです。 InfluencersController#create内からDevise :: RegistrationsController.new.createメソッドを呼び出すことを試みました。しかし、これは(@responseが見つからない、または 'response.env'が見つからない、または 'devise.mappings'が見つからないなどのさまざまな問題に遭遇したとしても)難しい問題です。
私たちは継承することで、作成機能で「スーパー」と呼ぶことができます。しかし、私たちはInfluencersControllerにDevise :: RegistrationsControllerを継承させたくありません。なぜなら、このコントローラは真のDeviseコントローラではないからです。
これを回避する方法はありますか?
:
セットアップに必要な場合は特定のエンドポイント(
influences/registrations
)は、「インフルエンサー」あなたは、単に工夫コントローラでbuild_resourceメソッドをオーバーライドすることができます登録します。しかし、コンプは、複雑さとパフォーマンスの点でかなり巨大です。 – maxSTIまたはMTIとは何ですか?そしてあなたが正しいです、私たちは、そのうちの1人がインフルエンサーであるユーザ役割を使用しています。しかし、インフルエンサーは余分なデータ・メンバーを持っているため、独自の表を作成します。 InfluencersControllerにDevise :: RegistrationsControllerから継承せずにユーザーを登録させる方法があるかどうかを尋ねています。 –
単一テーブルの継承と複数テーブルの継承はい、リダイレクトする前にセッションにIDを格納するように 'sign_in @ user'を呼び出す点を除いて、他のCRUDコントローラーと大きく異なるわけではなく、ユーザーを登録するコントローラーを最初から作成することができます。 – max