路由对我来说总是比较讨厌的事情之一。 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
答案 0 :(得分:1)
为了更新员工,Rails必须知道要更新的员工以及您需要的ID。如果您不需要ID,则应设置默认路线,而不是resources :employees
:
put '/employees', :to => 'employees#update'
顺便说一下,为什么使用:only
然后列出所有可能的操作?如果您想要所有操作,则不需要:only
。如果您使用上面的自定义路由,则可能需要从资源中排除更新操作。为此,您可以使用:except
:
resources :employees, :except => :update