2

似乎设计没有在 app/controller 文件夹中创建任何控制器文件,现在我希望在用户/编辑视图中显示来自其他模型的一些自定义信息,但由于没有要添加的控制器,因此无法弄清楚如何做到这一点

@num_of_cars = current_user.num_of_cars.all

我希望在用户/编辑页面中显示 num_of_cars 但无法弄清楚如何做到这一点

编辑 - 下面提到的代码给了我错误,我将此代码放在我的设计/注册/编辑文件中

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

其中 myinfo 是另一个具有部分 _cars_list.html.erb 的资源,/myinfo 脚手架工作得非常好,但是当我尝试将该部分显示到用户/编辑中时,它给了我

undefined method `each_with_index' for nil:NilClass  

(我正在使用 each_wit_index 来显示列表,但我认为这不是问题)

4

3 回答 3

5

Override the Devise sessions controller actions:

# 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 

Register the controller:

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

您可以为handel 创建新的控制器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.erbpasswords/edit.html.erb

于 2013-04-12T07:22:20.747 回答
1

在您的情况下,您不必覆盖设计控制器。你可以更换

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

<%= render partial: 'myinfo/cars_list', :locals => { :num_of_cars => current_user.num_of_cars.all } %>

在您的设计/注册/编辑页面中。然后在“myinfo/cars_list”部分中使用“num_of_cars”变量而不是“@num_of_cars”应该可以解决您的问题。

于 2013-04-12T11:07:25.597 回答