1

コミュニティサイトのプロファイルページを作成しようとしています。私はビデオチュートリアルに従い、DevisegemとCanCangemの両方についてgithubのドキュメントを読みました。これらの2つのgemとrailscastsのチュートリアルのおかげで、認証システムをインストールし、現在機能しています。

私はRubyとRailsに非常に慣れていないので、すべてがまだ非常に文字通りです。私の最初の質問は、 CanCanwikiページのコード行に関するものです。

<!-- in users/_form.html.erb -->
<%= f.collection_select :role, User::ROLES, :to_s, :humanize %>

ユーザーフォルダまたはこのコントローラが表示されません。これは私が生成できるものですか?たとえば、実行しました

rails g devise User

私も実行できますか:

rails g controller Users

私はここでこの質問を見ましたが、答えを完全には理解していません。やりたいことを処理する「Users」コントローラーを生成するとエラーが発生しますか?

デバイスビューを生成しましたが、コントローラーが表示されません。これらが上書きされる可能性があることは理解していますが、これがどのように機能するかはよくわかりません。上書きしても、すべてのデフォルトのデバイスコントローラー機能と上書きされたコントローラーは引き続き機能しますか?

「ユーザー」コントローラーを生成できれば、すべてのプロファイルビュー情報のビューテンプレートをその場所に配置できると思います。質問の数とこの投稿の長さについてお詫び申し上げますが、少しの助けがあれば、私は立ち去って再び走ることができると思います。提供された情報をありがとう。

4

1 に答える 1

2

了解しました。これを解決しました。同様の質問があり、利益を得る可能性のある人のために、私の解決策を投稿します。

私の質問の1つは次のとおりです。

私も実行できますか:

rails g controller Users

はい、これは私がしたことです。私は気の利いたスキャフォールドジェネレーターを使用してビューを生成しているので、このコマンドは実際には次のようになります

rails g nifty:scaffold user   

ユーザーの後に変数を渡さなかったことに注意することが重要です。DeviseはすでにデータベースにUsersテーブルを作成しています。これにより、競合が発生します。Railsは、元のデータベースを上書きしたいと考えていますが、これはやりたくないことです。

これにより、ユーザーCRUDの正しい構造が構築されます。次に、config/routes.rbファイルを開きます。気の利いたジェネレーターを使用しresources :usersて、このファイルの先頭にを追加します。これをデバイスリソースの下に移動し、このデバイスwikiページで説明されているようにパスのプレフィックスを付けて、以下のコードのようにします。

devise_for :users, :path_prefix => 'd'
resources :users

これは、すべてのデバイスコントローラに「/ d /」プレフィックスを追加して、ユーザーコントローラおよびデバイスコントローラのURLパスとの競合を取り除くために非常に重要です。

次のコードをusers_controllerupdateメソッドに追加するだけでなく:

if params[:user][:password].blank?
  params[:user].delete(:password)
  params[:user].delete(:password_confirmation)
end

これにより、デバイスが正しく検証されます。

楽しみがやって来ました。まだ登録していない場合は、ユーザーを登録してください。これで、そのユーザーのプロファイルページが次の場所にあります。

localhost:3000 / users / 1 localhost:3000 / users / 2 localhost:3000 / users / 3 ... ect

ビューフォルダのユーザーshow.html.erbページを編集して、各ユーザーのプロファイルページに表示される情報を変更できます。

役割についての私の質問について:

<!-- in users/_form.html.erb -->
<%= f.collection_select :role, User::ROLES, :to_s, :humanize %>

これで、nifty-scaffoldジェネレーターによって作成されたユーザーコントローラーでこれにアクセスできるようになりました。ここで説明するように、Ryan Batesのメソッドに従ってCanCanの役割を統合している場合は、このコードをフォームに追加できます。

うまくいけば、これは他の人を助けるでしょう。

于 2012-02-26T18:55:22.790 に答える