哪条路线与具有可变动作的固定控制器匹配?

时间:2012-11-23 01:24:13

标签: ruby-on-rails routing

我有一个名为activities的控制器,它包含一些方法,例如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:活动,但是我得到了奇怪的结果。

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

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

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

等...

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

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

这会使用GET http请求将所选网址连接到您想要的正确控制器#操作。

另请注意,如果您使用行routes.rbresources :activities中为活动控制器创建了路线,则需要确保添加上面的自定义路由线 resources :activities用作自定义网址的全部内容,并将它们路由到控制器的show方法。

答案 1 :(得分:2)

处理控制器中的任何任意操作都是非RESTful的。很多旧的rails版本都是这样处理的:

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

..事实上,今天Rails仍然可以实现。您应该注意不要在单个控制器中混合使用RESTful和任意操作,因为“create”和“delete”之类的操作不应该响应GET请求。

或者,您可以根据自己的资源推广“体重”,“食物”和“锻炼”。

此外,你显然不能拼写“资源”或“技术”,虽然我更喜欢运用一个技术的形象。

答案 2 :(得分:1)

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

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

如果您的方法名为upweightfood_resexercises