2

アプリ/コントローラーフォルダーにコントローラーファイルを作成していないようです。今、ユーザー/編集ビューで他のモデルからのカスタム情報を表示しようとしていますが、追加するコントローラーがないため、その方法を理解できません

@num_of_cars = current_user.num_of_cars.all

ユーザー/編集ページに num_of_cars を表示しようとしていますが、その方法がわかりません

編集 - 以下のコードでエラーが発生しました。このコードをデバイス/登録/編集ファイルに入れています

<%= render partial: 'myinfo/cars_list' %> 

myinfo は部分的な _cars_list.html.erb を持つ別のリソースであり、/myinfo スキャフォールドは完全に正常に動作しますが、その部分を users/edit に表示しようとすると、

undefined method `each_with_index' for nil:NilClass  

(私は each_wit_index を使用してリストを表示していますが、それは問題ではないと思います)

4

3 に答える 3

5

Devise セッション コントローラー アクションをオーバーライドします。

# app/controllers/sessions_controller.rb
class SessionsController < Devise::SessionsController

  def edit
    # add custom logic here
    @num_of_cars = current_user.num_of_cars.all 
    super
  end

end 

コントローラーを登録します。

# app/config/routes.rb
devise_for :users, :controllers => {:sessions => "sessions"}
于 2013-04-12T07:10:01.883 に答える
2

ハンドル用の新しいコントローラーを作成できますdevise/registration/edit

ここはcontroller/passwords_controller.rb

class PasswordsController < Devise::RegistrationsController
  before_filter :authenticate_user!
  def edit
    @num_of_cars = current_user.num_of_cars.all
    super
  end

  def update
    @user = current_user
    # raise params.inspect
    if @user.update_with_password(params[:user])
      sign_in(@user, :bypass => true)
      redirect_to user_path, :notice => "Password has been change!"
    else
      render :edit,:locals => { :resource => @user, :resource_name => "user" }
    end
  end
end

これがroutes.rbです

devise_scope :user do
 get '/edit_password' => 'passwords#edit', :as => :change_password
 put '/change' =>  'passwords#update'
end

そして最後にコピーできdevise/registrations/edit.html.erbますpasswords/edit.html.erb

于 2013-04-12T07:22:20.747 に答える