Rails路由添加点与Devise

时间:2014-06-16 16:02:59

标签: ruby-on-rails devise path routes

我的rails应用程序正在添加一个点/句点“。”尝试浏览设计宝石用户的个人资料时进入路线。

routes.rb中:

devise_for :users, :controllers => { :registrations => "registrations" } 

(基本上使用路由来允许一些自定义函数 - 它应该仍然使用默认的设计路由路径。

Rake路线输出:

user_registration POST   /users(.:format)               registrations#create
new_user_registration GET    /users/sign_up(.:format)       registrations#new
edit_user_registration GET    /users/edit(.:format)          registrations#edit

视野中的链接:

<%= link_to 'Edit', edit_user_registration_path(user) %>

用户在.each循环中定义。

URL中的输出链接如下所示:

http://localhost:3000/users/edit.2

我的目标是有一个链接来编辑任何用户的个人资料(当然,这些项目之外的权限受到控制)。

我“认为”我的问题是routes.rb而没有在那里正确指定路径。我认为它应该是包含rake routes参数的:id

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

正常路线的设计,registrations#edit用于编辑当前登录用户,如果你想为用户提供CRUD界面(我想你想编辑用户),你可以添加另一个控制器(例如users_controller.rb)并进行一些操作,例如控制器:

def edit
  @user = User.find(params[:id])
end

def update
   if params[:user][:password].blank?
     params[:user].delete(:password)
     params[:user].delete(:password_confirmation)
   end
   @user = User.find(params[:id])

   respond_to do |format|
     if @user.update_attributes(params[:user])
        format.html { redirect_to some_path, notice: 'Updated.' }
        format.json { head :no_content }
      else
        format.html { 
          flash[:alert] = "Something wrong"
          render :action => :edituser
        }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
end

routes.rb上,你可以像这样关注

scope '/user' do
 match '/edit/:id' => 'users#edit', :as => :edit_user
 put '/update/:id' => 'users#update', :as => :update_user
end

每个部分的链接如下:

<%= link_to 'Edit', edit_user_path(user) %>

参考:

答案 1 :(得分:1)

我认为Devise的edit_user_registration_path在内部使用current_user,因此您不应该在(user)

中使用link_to