【问题标题】:Getting 'Rake Routes' to display what I want获取“Rake Routes”以显示我想要的内容
【发布时间】:2013-07-16 22:09:40
【问题描述】:

路由对我来说一直是最烦人的事情之一。 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

【问题讨论】:

  • 我在帖子中添加了我的更新方法。这会告诉 Rails 需要更新的员工吗?我认为确实如此。我说的对吗?
  • 是的,更新员工。但是你在那里使用params[:id],所以你应该向/employees/:id发出请求,而不是/employees

标签: ruby-on-rails routes


【解决方案1】:

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

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

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

resources :employees, :except => :update

【讨论】:

  • 好吧,我想我确实需要身份证。这说得通。如果您知道我需要 ID,为什么还要包含“如果您不需要 ID”部分?
  • @MikeDunnegan 我不知道你是否需要身份证。在某些情况下,您不需要 id。例如。如果登录用户只能更新自己的记录,则不需要 id。显然你确实需要一个 id,所以你应该改变你的表单,把 puts 改为 /employees/:id
  • 太棒了,关于表单的最后一点修复了它。非常感谢,伙计
  • 现在看来,属性(特别是电子邮件)没有更新。这么近……
  • 你能在日志中看到正在发送的邮件属性吗?邮件是attr_accessible吗?
猜你喜欢
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 2020-06-25
  • 2018-02-08
  • 2012-06-30
  • 2019-04-24
相关资源
最近更新 更多