我使用sorcery gem来管理身份验证。你可以看到下面的代码。
模型/ user.rb
class User < ActiveRecord::Base
authenticates_with_sorcery!
attr_accessible :username, :email, :password, :password_confirmation
has_many :clients
has_many :orders
validates_presence_of :email, :username, :on => :create
validates_presence_of :password, :on => :create
validates_uniqueness_of :email
validates_confirmation_of :password, :message => "confirmation doesn't match password "
validates_length_of :password, :minimum => 6
end
控制器/ users_controller.rb
class UsersController < ApplicationController
before_filter :require_login, :except => [:not_authenticated, :new, :create]
skip_authorize_resource :only => [:new, :create]
layout "users"
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to clients_url, :notice => "Bienvenu dans la communauté Bakden!!!"
else
render :new
end
end
#show user profile
def show
@user = User.find(session[:user_id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
end
# edit user profile
def edit
@user = User.find(session[:user_id])
end
# update user profile
def update
@user = User.find(session[:user_id])
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to(@user, :notice => 'User was successfully updated.') }
format.json { head :ok }
else
format.html { render :action => "edit" }
format.json { render json: @user.errors, :status => :unprocessable_entity }
end
end
end
_form.html.erb
<%= simple_form_for (@user),:html => {:multipart => true} do |f| %>
<div class="inputs">
<%= f.input :adress %>
<%= f.input :city %>
<%= f.input :country ,:as => :country %>
<%= f.input :telephone, :as => :string %>
<%= f.file_field :picture %>
<div class="actions">
<%= f.button :submit %> | <%= link_to "cancel", profile_path%>
</div>
<% end %>
如何编辑地址,电话等用户信息,而不会影响作为凭据的密码,电子邮件和用户名。
答案 0 :(得分:2)
我使用best-in-place gem来编辑特定字段。以下是Ryan Bates here的视频啧啧。
要查看测试示例,请检查this。
我发现这是在不妨碍用户体验的情况下编辑特定字段的最快速最简单的方法,如果您只想更新电话和地址等特定字段,肯定会有效。希望它有所帮助。
答案 1 :(得分:2)
示例代码,来自Devise,这适用于您的用户模型:
# Update record attributes when :current_password matches, otherwise returns
# error on :current_password. It also automatically rejects :password and
# :password_confirmation if they are blank.
def update_with_password(params, *options)
current_password = params.delete(:current_password)
if params[:password].blank?
params.delete(:password)
params.delete(:password_confirmation) if params[:password_confirmation].blank?
end
result = if valid_password?(current_password)
update_attributes(params, *options)
else
self.attributes = params
self.valid?
self.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
false
end
clean_up_passwords
result
end
# Set password and password confirmation to nil
def clean_up_passwords
self.password = self.password_confirmation = nil
end