0

認証に Devise (および Omniauth) を使用する Ruby on Rails アプリがあります。

アプリからページを埋め込みたい iOS アプリ (制御不能) と統合しようとしています。このアプリでは、ページに特定の外観を持たせる必要があるため、認証ビューの追加セットを作成したいと考えています。

Deviseのドキュメントを掘り下げた後、新しいdevise_scopeブロックを作成する必要があるかもしれないということを集めましたroutes.rb:

devise_scope :user do
    get    "iosapp/users/sign_in"  => "devise/sessions#iosapp_new"
    post   "iosapp/users/sign_in"  => "devise/sessions#iosapp_create"
    delete "iosapp/users/sign_out" => "devise/sessions#iosapp_destroy"
end

そして、それらのルートに対応するビューの新しいセットを作成しました:

app/views/devise/sessions/iosapp_new.html.rb
app/views/devise/sessions/iosapp_create.html.rb
app/views/devise/sessions/iosapp_destroy.html.rb

しかし、ブラウザーで/iosapp/users/sign_inをロードすると、Rails エラーが発生します。

undefined method `errors' for nil:NilClass

このエラーは、devise_helper.rb の 9 行目 ( https://github.com/plataformatec/devise/blob/master/app/helpers/devise_helper.rb )に起因します。

module DeviseHelper
  # A simple way to show error messages for the current devise resource. If you need
  # to customize this method, you can either overwrite it in your application helpers or
  # copy the views to your application.
  #
  # This method is intended to stay simple and it is unlikely that we are going to change
  # it to add more behavior or options.
  def devise_error_messages!
    return "" if resource.errors.empty?

    messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
    ...

私は明らかにここで何か間違ったことをしていますがresource、「代替」ビューから呼び出されたときに未定義である理由を理解できません。追加のコントローラーメソッドも作成する必要があるようですが、これに関するドキュメントは見つかりません。

私は軌道から外れていますか?または、これよりも私の目標を達成するためのより良い方法はありますか?

4

1 に答える 1

1

Your new views need form_for resource - do you have that in place? It can't find the errors on the resource if there is no resource, hence the error on nil.

于 2013-02-28T19:43:11.857 に答える