我想基于数据库中的整数值执行一些计算,用于"用户"类。 (使用设计。)这在 users / show.html.erb 上正常工作,但在 registration / edit.html.erb(localhost:3000 / users / edit)
为此,我在 users_controller.rb
中设置了以下内容:before_action :set_calc_vars, only: [:edit, :show]
def edit
@user = User.find(params[:id])
respond_to do |format|
format.html # edit.html.erb
format.xml { render :xml => @user }
end
end
def show
@user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @user }
end
end
protected
#Sets value for calculated variables
def set_calc_vars
user_client = User.find(params[:id])
@rev_left = user_client.revlimit - user_client.revused
end
在两个页面上,显示@rev_left值的代码是:
<%= @rev_left %>
我不确定为什么set_calc_vars在show.html.erb上运行但不在edit.html.erb上运行。
在show.html.erb上,它会为登录用户显示正确的整数值。 在edit.html.erb上没有显示任何内容,表明该值为nil。
我的路线如下:
devise_for :users
resources :users, :only => [:show]
root 'pages#home'
答案 0 :(得分:2)
根据您的路线文件,您使用devise
进行身份验证,并拒绝users_controller
除show
以外的所有操作:
resources :users, :only => [:show]
这意味着Devise::RegistrationsController
提供注册/修改操作(请查看here)。如果您要对edit
操作执行某些过滤,则应在该特定before_action
内部实施registrations_controller
。这可以通过以下两种方式实现:
devise
gem的源代码。在这种情况下,您应找到gem的本地文件夹并修改相应的.rb
文件(不推荐)。devise
默认控制器并将before_action
应用于该覆盖控制器的edit
。基本上,您只需在控制器中创建名为devise
的文件夹,然后将整个设计控制器复制/粘贴到其中。这不需要额外的配置。有关此主题的更多信息,您可以查看this thread,或者甚至只是在Stack Overflow上查看其他主题,其中包括&#34;设计覆盖&#34;标题。