2012-08-10 69 views
1

我正在为Ruby on Rails应用程序使用Devise身份验证gem。当用户通过创建新会话登录时,我想更新我的用户模型中的一列。什么是最好的方法来做到这一点?通过Devise会话登录更新用户模型属性

有什么办法让隐藏字段更新模型?

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> 
    <div><%= f.label :email %><br /> 
    <%= f.email_field :email %></div> 

    <div><%= f.label :password %><br /> 
    <%= f.password_field :password %></div> 

    <% if devise_mapping.rememberable? -%> 
    <div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div> 
    <% end -%> 

    <% f.hidden_field :field_a, :value => 'test' %> 

    <div><%= f.submit "Sign in" %></div> 
<% end %> 

回答

1

您可以通过覆盖Devise :: SessionsController创建方法来实现此目的。当用户登录时它只会验证用户,它不会更新用户记录。因此,有没有使用保持在表单的隐藏字段的

尝试这样

class Users::SessionsController < Devise::SessionsController 

def create 
#do your update here 
end 

end 

否则,你可以按照这个链接http://denmarkin.tumblr.com/post/5194645960/how-to-overwrite-devise-sessions-controller-in-rails-3

+0

感谢。我试过你的解决方案。我的路线是:'devise_for:users,:controllers => {:sessions =>:sessions}',我有一个'sessions_controller.rb',并且在我的视图中也创建了会话文件夹。在新会话文件夹中,我更改了文本以查看它是否正确工作。新的会话视图正确显示,但是当我尝试登录时,我得到一个路由错误:'路由错误没有路由匹配[POST]“/sign_in.user”任何想法? – diasks2 2012-08-10 11:34:49

+0

我想你使用的是“class Users :: SessionsController PradeepKumar 2012-08-10 11:41:30

+0

谢谢, – diasks2 2012-08-10 11:56:29