我有2个表news
和news_type
。我还有3种基本类型的新闻:政治,技术和体育。我如何通过子域过滤这些数据?
例如:
如果我转到example.com
,我会在主页上收到所有新闻
如果我转到sport.example.com
,我会收到类型为sport
等等。
答案 0 :(得分:1)
在routes.rb文件中,您可以在路径上提供约束。例如:
# routes.rb
...
get "/" => "sports#index", constraints: { domain: "sport.example.com" }
get "/" => "tech#index", constraints: { domain: "tech.example.com" }
root :to => 'static#index'
这将路由
sport.example.com
到index
SportsController
操作
tech.example.com
到index
TechsController
操作
example.com
到index
StaticController
操作
答案 1 :(得分:0)
感谢Tyler的回答,但我遇到了一种约束方法,它允许为子域提供更动态的解决方案,比如分配给news_item的标签,即:" rugby.example.com"将获取所有带有rugy标签的news_items。
# routes
constraints(Subdomain) do
match "/" => "news_items#index"
end
#lib/subdomain.rb
class Subdomain
def self.matches?(request)
request.subdomain.present? && request.subdomain != "www"
end
end
# news_items_controller.rb
def index
@item_tag = ItemTag.find_by_title(request.subdomain)
@news_items = @item_tag ? @item_tag.news_items : NewsItem.all
end
需要注意的是,这需要在传统的根声明之上声明。