2013-10-13 3 views
0

Я реализую систему тегов для наших статей.Система тегов с отношениями

class Country < ActiveRecord::Base 
    has_many :articles 


end 


class Region < ActiveRecord::Base 
    has_many :articles 


end 


class Article < ActiveRecord::Base 

     belongs_to :region 
     belongs_to :country 

     def self.tagged_with(name) 
     Tag.find_by_name!(name).articles 
     end 

    end 

Статья Контроллер:

def index 
    if params[:tag] 
     @articles = Article.tagged_with(params[:tag]) 
     else 
     @region = Region.find(params[:region_id])   
     @article_region = @region.articles 
     end 
    end 

На моей странице индекса я показывать только те статьи, которые связаны с правильной областью params(region_id), так что это работает отлично. Но как я могу интегрировать параметры региона и страны в функции «tagged_with»?

Пример

/en/italy/umbria/articles/wines> показывает статьи, помеченные «вина» и которые имеют отношения с областью Umbria

/en/italy/tuscany/articles/wines> показывает статьи с меткой «вина» и которые имеют отношения с регионом тоскане

/ный/италия/статьи/вина> показывает статьи, помеченные «вина» и которые имеют отношения с этой страной Италия

ответ

1

у вас есть два варианта: гнездящаяся Ваш г источников и использования динамических сегментов. Проверить рельсы руководство:

http://guides.rubyonrails.org/routing.html#dynamic-segments

В принципе можно сказать так:

# routes.rb, You should put this just before defining root path. Also test how it works with routes scopes/namespaces 
get ':country/:region/articles/:tag', to: "articles#tagged_and_regional" 

Контроллер:

#articles_controller.rb 
def tagged_and_regional 
    Article.tagged_and_regional(params[:country], params[:region], params[:tag]) 
end 

Модель:

# I don't know Your data structure, so I am taking a guess 
def self.tagged_and_regional(country, region, tag) 
    joins(:region, :country, :tags) 
    .where("counties.name = ? AND regions.name = ? AND tags.name = ?", country, region, name) 
end 
Смежные вопросы