0

タグ付けにはacts-as-taggable-onを使用します。

アパートメントコントローラー

def index
  if params[:tag]
    @apartments = Apartment.tagged_with(params[:tag])
  else
    @apartments = Apartment.all
  end    
end

ルート

resources :apartments do
  #...
  collection do
    get ':tag', to: 'apartments#index', as: :tag
  end
  #...

/apartments/tag1例などで素敵なURLを取得します。

indexアパートメントテンプレートのタグ名に基づいてカスタム コンテンツを表示したいと考えています。

Apartmentindex見解:

- @appartments.each do |tags|
   - case tags.tag_list
   - when "tag1"
      %p tag1 content
   - when "tag2"
      %p tag2 content
   - else
      %p default content

URLに移動するとapartments/tag1、テキスト"default content"は表示され、表示されません"tag1 content"

私は何を間違っていますか?

4

1 に答える 1

1

コードに関するいくつかの注意事項があります。

  1. ロジックをビューから遠ざけてください。つまり、コードをヘルパー メソッドに抽出します。
  2. caseonを使用しないEnumerableでください。あなたの場合は配列のようです。include?要素が配列内に存在するかどうかを確認するために使用します。

1.9.3p194 :001 > a= [:a, :b, :c]
 => [:a, :b, :c] 
1.9.3p194 :002 > case a
1.9.3p194 :003?>   when :a
1.9.3p194 :004?>   p '1'
1.9.3p194 :005?>   when :b
1.9.3p194 :006?>   p '2'
1.9.3p194 :007?>   when :c
1.9.3p194 :008?>   p '3'
1.9.3p194 :009?>   when :d
1.9.3p194 :010?>   p 'Never'
1.9.3p194 :011?>   end
 => nil 
1.9.3p194 :012 > a.include?(:c)
 => true 
于 2012-11-16T17:18:58.790 に答える