让'Rake Routes'显示我想要的东西

时间:2013-07-16 13:59:08

标签: ruby-on-rails routes

路由对我来说总是比较讨厌的事情之一。 Rake路线会显示我可以使用的信息,但我无法按照我希望的方式操纵信息。在我的程序中,我有一个用户模型,我使用了设计。每个用户都可以创建员工,员工可以成为自己的用户(使用登录凭据等)。

我遇到了员工“更新”方法的问题。用户更新方法工作正常。当我运行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

1 个答案:

答案 0 :(得分:1)

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

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

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

resources :employees, :except => :update