为表单的每个字段自定义更新路由 rails

Customized update route for each field of a form rails

我正在尝试单独保存表单的每个字段。但我真的很难实施它。

这是我正在尝试的代码。

users_controller.rb:

def update_name
  @user = User.find(params[:id])
  if @user.update_attributes(params.require(:user).permit(:name))
    # Handle a successful update.
    flash[:success] = "Name updated"
    redirect_to edit_user_path
  else
    render 'edit'   
  end
end

def update_email
  @user = User.find(params[:id])
  if @user.update_attributes(params.require(:user).permit(:email))
    # Handle a successful update.
    flash[:success] = "Email updated"
    render 'edit'
  else
    render 'edit'   
  end
end

routes.rb:

get 'users/:id/edit' => 'users#edit', :as => :edit_user
get  '/users/:id' => 'users#show', :as => :user
patch 'users/:id/name'=> 'users#update_name'
patch 'users/:id/email'=> 'users#update_email'

edit.html.erb:

<%= f.button "Save", :action => "update_name" , :method => :patch, class: "btn btn-primary", id:"editAccount" %>

<%= f.button "Save", :action => "update_email" , :method => :patch, class: "btn btn-primary", id:"editAccount" %>

我可以进行正常更新,但我想单独保存字段。如何从正常更新路由(用户/:id)更改路由。

我该如何解决这个问题?谢谢

你可以用你的更新方法试试这个,我还没有添加你是如何更新密码的,所以请检查一下。

def update
  if params[:user][:email].blank? and params[:user][:password].blank?  
    @user.update_attributes(params.require(:user).permit(:name))
    flash[:success] = "Name updated"
    redirect_to edit_user_path
  elsif params[:user][:email].present? and params[:user][:password].present?
    @user.update_attributes(params.require(:user).permit(:email))
    flash[:success] = "Email updated"
    render 'edit'
  else
    render 'edit'
  end 
end