2016-05-24 5 views
2

私はデータベースから複数のビューのフォームを受け入れるためにdeviseを使用しようとしています。私は本質的に3つのビューの間でデバイズを行いました.1つは、以下のコードの第1段落を使い、htmlを受け入れます。しかし、私の他のビューでHTMLを使用すると、私のアプリは "2引数、期待0"または "1番目の引数はnilできない"のいずれかで中断します。私はちょっと失われました。なぜなら、HTMLがなくてもうまく動作するので、データベースから読み込みをしていることを知っているからです。何か案は?form_for deviseループでhtmlを受け付けませんか?

コードが第一ビュー上で動作しますが、(HTMLが削除されない限り)そうでない他のすべてのビュー -

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, class: "form floating-label" }) do |f| %> 
<% end %> 

HTMLが削除されたときにどのように見えるかのコード(CURRENT_USERが)私は複数のページ上のコードを使用することができますそう必要です。私は上記のようなコードを作成する必要があります。

+0

あなたの質問がスタックオーバーフローのために難しくなる瞬間 – whataboutme1

+0

このスレッドを参考にしている人なら誰でも、devisのカスタムform_forはルートが設定されていると仮定して、あなたのdeviseコントローラを継承しているとしか動作しません。デフォルトでは、deviseはコントローラーを表示しませんが、コントローラーを生成して継承するだけで、必要な変更を追加してから、そのコントローラーに行くようにルートを指示することができます。すべての作業が完了したら、必要に応じてビュー全体でform_for構文(またはそれ以上)を使用できます。 – whataboutme1

答えて

1
<%= form_for current_user, { url: registration_path(resource_name), method: :patch } do |f| %> 
<% end %> 

resourceresource_name両方工夫コントローラによって定義され、考案ビューの外部からアクセスできません。しかし、ユーザがサインインしていない場合は、resourceの代わりにcurrent_userがnilなので動作しません。 current_userが存在する場合

次は動作するはずです:

<%= form_for(current_user, as: :user, url: registration_path(:user), html: { method: :put, class: "form floating-label" }) do |f| %> 
<% end %> 

限りdevise_for :usersはあなたのルートで定義されています。

+0

同じエラーが発生する「フォームの最初の引数にnilを含めることも空でもない」ルートが正しく設定されている devise_for:ユーザー、コントローラー:{登録: 'ユーザー/登録'} :ユーザーdo get users/changepassword '=>' devise/registrations#changepassword ' – whataboutme1

+0

current_userは常にdeviseによって定義されます – whataboutme1

+0

常に定義されますが、必ずしもそうではありません。それ以外の場合はエラーを受け取ることはできません。ユーザーが現在サインインしていないかのように見えるので、 'current_user'の値はnilです。 –

関連する問題