通过子域过滤ruby on rails中的数据

时间:2013-09-26 16:08:14

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

我有2个表newsnews_type。我还有3种基本类型的新闻:政治,技术和体育。我如何通过子域过滤这些数据?

例如:

如果我转到example.com,我会在主页上收到所有新闻

如果我转到sport.example.com,我会收到类型为sport

的所有新闻

等等。

2 个答案:

答案 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.comindex
  • 中的SportsController操作
  • tech.example.comindex
  • 中的TechsController操作
  • example.comindex
  • 中的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

需要注意的是,这需要在传统的根声明之上声明。