1

デバイスの動作をカスタマイズしようとすると、デバイスがどのように機能するかを理解するのに苦労しています。

SocietyCollaboratorの2 つの異なるモデルを処理する必要があり、登録フォームは両方の同じビューにある必要があります。
したがって、両方のモデルを処理する新しいコントローラーを作成して、 「devise registration controller create method」をオーバーライドする必要があります。

そして、ここに痛みが来ます。
ここから「別のコントローラー内の Devise フォーム」とhereから、devise を機能させるには、これらの新しいヘルパーを定義する必要があることがわかります。

module ContentHelper
  def resource_name
    :user
  end

  def resource
    @resource ||= User.new
  end

  def devise_mapping
    @devise_mapping ||= Devise.mappings[:user]
  end
end

そして、オーバーライドしたい create メソッドは次のとおりです。

def create
build_resource

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

終わり

ワーデンの機能を損なうことなく機能させる方法がわかりません。(build_resource)。なにか提案を?性感染症を使わずに解決策を見つけることはできません!

4

2 に答える 2

0

デバイスのすべてのビューで変数を定義できます。たとえば、

@type = :society

def resource_name
    @type
end

その後、元のコントローラーとビューを使用して、それを AplicationHelper に追加するだけです

PD: User.new の場合、次のような eval 条件で文字列を使用できます。

@res = "Society"

それから

@resource ||= eval(@res).new
于 2014-02-13T16:03:49.507 に答える
0

複雑なモデル設定を行うことになり、後で苦労する可能性があるようです。必要な 2 つの異なる「ユーザー」モデルがある場合、おそらくユーザー モデルを保持し、さらにそれぞれが「has_one :user」であるソサエティ モデルとコラボレーター モデルを保持することができます。そのようにして、サインアップ時にユーザー レコードを作成し、Society または Collaborator メソッド (選択した方) を作成します。そうすれば、devise (およびすべての認証) は User モデルにリンクされるだけで、シンプルなままになります。

一般に、穀物と戦っていることに気付いた場合は、自分がしていることを再評価することをお勧めします. 何か画期的なことをしているのでない限り、物事はそれほど難しくないはずです。

于 2012-04-15T13:05:38.417 に答える