我想知道为什么用户在编辑个人资料后会继续退出?我的更新功能是
def update
flash[:notice] = "what is params[id]", params[:id]
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
#flash[:success] = "Profile updated"
sign_in @user
redirect_to @user
else
render 'edit'
end
end
params id
正确传递,并且我的数据库上的所有内容都正确更新。我users/edit.html.erb
中的表单是
<% provide(:title, "Edit user") %>
<h1>Update your profile</h1>
<div class="row">
<div class="span6 offset3">
<%= form_for @user, :html => {:multipart => true} do |f| %>
<%= render 'fields', object: f.object, f: f %>
<%= f.submit "Save changes", :class => "btn btn-large btn-primary", :style =>"display:block;" %>
<%= image_tag(@user.image_url(:thumb), :class => "image_avatar") if @user.image? %>
<%= f.file_field :image, :class=>"upload_button" %>
<% end %>
</div>
</div>
我正在使用devise gem
,但此编辑未使用设计路线(我正在使用设计进行注册)。这会影响它吗?
答案 0 :(得分:2)
我遇到了这个奇怪的问题,在我的情况下,这是由于在保存用户时重新生成了密码。发生这种情况,尽管配置文件表单中没有密码字段。重置是通过ActiveRecord回调进行的,该回调为用户分配了facebook身份验证随机密码。我通过确保永远不会为已经设置了encrypted_password的用户分配随机密码来修复它。
设计通过warden gem在会话中存储用户,存储的内容类似于[[user_id],encrypted_password](在session ['warden.user.user.key']中)。当密码被更改时,会话中的用户查找将失败 - 因为加密的密码不再匹配 - 因此用户将被注销。
答案 1 :(得分:1)
是的,设计有sign_in方法。
但是,在编辑个人资料后,您的用户不应该退出。