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> 「ワイン」のタグが付けられた、ウンブリア州と関係のある記事を表示しています

/en/italy/tuscany/articles/wines> 「ワイン」のタグがつけられた、トスカーナ地方と関係のある記事を表示しています

/en/italy/articles/wines > 「ワイン」のタグが付けられた、イタリアと関係のある記事を表示します

4

1 に答える 1

1

リソースのネストと動的セグメントの使用の 2 つのオプションがあります。レールガイドを確認してください:

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
于 2013-10-13T20:57:25.947 に答える