Rails路由 - 未定义的局部变量或方法

时间:2012-03-19 18:09:59

标签: ruby-on-rails ruby methods routes undefined

刚开始使用Rails,我遇到了定义路由的问题。我似乎没有任何文档可以解决这个问题,而且我得到一个未定义的局部变量或方法错误。

我需要点击链接并采取特定操作,排序。 sortit没有视图,因为它对mystuff对象进行排序,然后重定向到索引页面。当我使用其中一个预定义的操作时,实际上一切正常。当然,没有任何预定义的动作是我想要做的。

我的/config/routes.rb文件:

match "/mystuff/sortit'", :controller => "mystuff", :action => "sortit"

resources :mystuff

我的/app/controllers/mystuff_controller.rb文件

class MystuffController < ApplicationController
....
  def sortit
     @mystuff.sort
     redirect_to_mystuff_path
  end
....
end

我的/app/views/mystuff/index.html.haml文件:

-#  This file is app/views/mystuff/index.html.haml
%h1 All My Stuff

%table#mystuff
  %thead
    %tr
      %th= link_to raw("Type"), sortit
 ....

正如我所说,当我用预定义的动作替换sortit时,执行该动作。但是sortit因此错误而失败:

undefined local variable or method `sortit' for #<#<Class:0x9997a10>:0x997c0f8>
app/views/mystuff/index.html.haml:7:in `_app_views_mystuff_index_html_haml__61272557_87671610'

那么我错过了什么?如何点击生成的Type链接时如何执行sortit?

谢谢!

PS:我的佣金路线输出:

mystuff GET / mystuff(。:format){:action =&gt;“index”,:controller =&gt;“mystuff”}

....

 mystuff_sortit / mystuff / sortit(。:format){:controller =&gt;“mystuff”,:action =&gt;“sortit”}

...

所以rake路由显示我的路由名为mystuff_sorit - 但不是对象名称前面的操作?不应该是sortit_mystuff吗?

1 个答案:

答案 0 :(得分:0)

您的操作为sortit,但您的观点为index

将您的操作更改为index

redirect_to也需要空格,所以请使用redirect_to mystuff_path ... 实际上是my_stuffs_path(复数),你可以从rake routes(在命令行,最有用的)看到你从路由中定义它作为资源。