2

路由对我来说一直是最烦人的事情之一。Rake 路由会显示我可以使用的信息,但我无法按照我想要的方式操作这些信息。在我的程序中,我有一个用户模型,为此我使用了 devise。每个用户都可以创建员工,员工成为他们自己的用户(使用登录凭据等)。

我在使用员工“更新”方法时遇到问题。用户更新方法工作正常。当我运行 rake 路线时,我得到以下几行

PUT    /users(.:format)                  devise/registrations#update
PUT    /employees/:id(.:format)          employees#update

当我尝试更新我的员工时,我收到了错误

No route matches [PUT] "/employees"

那是我希望能够 PUT 的路线,但看起来 rails 宁愿给我 /employees/:id 工作。

我的路线文件包括

devise_for :users
resources :users, :only => [:index, :show, :new, :edit, :create, :update, :destroy]
resources :employees, :only => [:index, :show, :new, :edit, :create, :update, :destroy]

任何帮助都会很棒,有关操纵我的路线的任何其他信息都会很棒。谢谢!

编辑

这是我的更新员工控制器方法

  def update
    @employee = current_company.users.find(params[:id])
    if @employee.update_attributes(params[:employee])
      redirect_to :action => 'show', :id => @employee.id
      flash[:notice] = "Employee information updated"
    else
      render :action => 'edit'
      flash[:notice] = "No edits were made"
    end
  end
4

1 回答 1

1

为了更新员工,Rails 必须知道要更新的员工以及为此您需要一个 id。如果您不需要 id,则应设置默认路由,而不是resources :employees

put '/employees', :to => 'employees#update'

顺便说一句,您为什么要使用:only然后列出所有可能的操作?:only如果您想要所有操作,则不需要。如果您使用上面的自定义路由,您可能希望从资源中排除更新操作。为此,您可以使用:except

resources :employees, :except => :update
于 2013-07-16T14:08:49.753 回答