0

我有这个控制器,称为活动,其中包含方法,如 updateweight、displaycalories 等。

<ul>
  <li><%= link_to "Home", "/" %></li>
  <li><%= link_to "Update Weight", "/activities/upweight" %></li>
  <li><%= link_to "Food Ressources", "/activities/food_res" %></li>
  <li><%= link_to "Exercises Technics", "/activities/exercises" %></li>
</ul>

哪条路线能够到达活动控制器和名称后面的方法?我已经尝试过 ressources :activities,但我得到了奇怪的结果。

感谢您的帮助

4

3 回答 3

2

要查找可用的路线,请使用rake routes您的 rails 应用程序目录的命令行中的命令。这将向您显示可用作链接的潜在路线列表。它们通常看起来像:

    users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new

ETC...

但是,在您的情况下,您正在制作非默认网址,因此您需要将它们添加到您的config/routes.rb文件中。因此,例如添加:

get '/activities/upweight' => 'activities#upweight'

这将使用 GET http 请求将选择的 url 连接到您想要的正确控制器#action。

另请注意,如果您routes.rb使用 line为活动控制器创建了路由resources :activities,则需要确保在此上方添加自定义路由行。resources :activities作为自定义 url 的包罗万象,并将它们路由到控制器的 show 方法。

于 2012-11-23T01:33:32.037 回答
2

处理控制器中的任意操作都是非 RESTful 的。很多旧的 Rails 版本处理这个问题:

match ':controller(/:action(/:id))(.:format)'

.. 事实上,今天的 Rails 仍然可以做到这一点。您应该注意不要在单个控制器中混合 RESTful 和任意操作,因为诸如“创建”和“删除”之类的操作不应响应 GET 请求。

或者,您可以将“体重”、“食物”和“锻炼”推广到他们自己的资源中。

此外,您显然不能拼写“资源”或“技术”,尽管我更喜欢锻炼技术的形象。

于 2012-11-23T01:43:09.940 回答
1

在您的情况下,路线可能如下所示:

match "/activities/upweight", :as => "activities#upweight" 
match "/activities/food_res", :as => "activities#food_res" 
match "/activities/exercises", :as => "activities#exercises"

前提是您的方法名为upweight, food_res,exercises

于 2012-11-23T01:59:01.200 回答