确定Rails路由到模型的特定属性

时间:2011-09-26 02:08:57

标签: ruby-on-rails ruby-on-rails-3 routes

所以我有一个资源类型Post,它可以与Category类型的资源相关联。我的routes.rb文件中包含以下内容:

resources "code", :controller => :posts, :as => :code
resources "sports", :controller => :posts, :as => :sports
resources "gaming", :controller => :posts, :as => :gaming
resources "personal", :controller => :posts, :as => :personal

因此,这通过友好的URL(例如http://host.domain/sports)获得了访问特定类别的预期效果,并且将收集所有具有体育类别的帖子。但是,我并不完全确定如何将这些资源作为特定于各个类别的范围。我想我可以做类似的事情:

match ":category_name", :to => posts#index

但这是有问题的,因为它会抓住一切。

所以我总结一下,我想要的是保持友好的URL(我指定的确切结构)来访问具有特定类别的帖子。想法?

1 个答案:

答案 0 :(得分:1)

您拥有多个资源,每个网址都应该可以访问。四种资源属于同一类型,可以确定为帖子。可以通过一个控制器提供它们的功能,并且很容易检测当前路径,然后解析并添加活动记录数范围

但让我们看起来更深一点。您具有相同类型的数据,可能具有相同的属性,因此常见模式为“单表继承”,它等于一个表和更多模型,“类型”列与模型不同。

控制器提供用户交互和数据流之间的接口,因此我建议您为每个资源使用独立控制器。这是一种普遍的做法。如果您不想键入更多典型代码,请使用Resourceful Controller插件。

然后你可以得到结构:

#routes
resources :code, sports, :gaming, :personal

# STI parent and children models
  model Post < ActiveRecord::Base
  model Sport < Post
  ...
相关问题