2010-07-11 51 views
1

我想链接到条目控制器中的动作addData。我已经构建的链接是这样的:RoR:我在做一个简单的动作链接时遇到了问题

<%= link_to image_tag (w.link, :border =>0) ,:controller => :entries, :action => :addData %> 

但是当我点击该链接时,我得到这个错误:

Couldn't find Entry with ID=addData 

我敢肯定这是因为我有一个宁静的设计。有没有解决这个问题的方法?谢谢阅读。

+0

作为一个说明,您应该解决您的空间'A(B,C )'可能会引起一些抱怨,使用'ab,c'或'a(b,c)'而不是两个! – 2010-07-11 17:45:35

+0

非常感谢您的帮助! – ben 2010-07-12 01:01:37

回答

1

Rails已经完全迁移到RESTful设计。这意味着要使用非标准操作,您必须将它们添加到您的资源config/routes.rb

如果他们在所有资源上操作,将它们添加到散列表:collection => {:addData => :post} 如果您有一个资源使用ID为:member的单个资源。 给你一些它。

map.resources :entries, :collection => {:addData => :post} 

要使用映射的任何行动,任何控制器的老风格,你可以将以下两行添加到您的config/routes.rb

map.connect ':controller/:action/:id.:format' 
    map.connect ':controller/:action/:id' 
1

您是否已经正确定义了此操作addData的路径? 顺便试试这个:

<%= link_to image_tag (w.link, :border =>0) ,{:controller => :entries, :action => :addData} %> 
+0

啊我不知道我必须定义一条路线。所以我不能没有定义路线就这样链接? – ben 2010-07-11 14:20:30

+0

路由基本上不过是URL的相对部分映射到的正则表达式。映射从路由文件的顶部开始。因此,如果遇到任何可以映射此URL的正则表达式,它将以该格式处理它。所以,map.resources部分应该在顶部,而map.connect部分(默认格式)应该在下面。如果它没有找到任何指定的url路由,它会尝试将其映射到默认格式(即map.connect部分)。希望解释有帮助。 – 2010-07-12 19:33:48