0

Я новичок в рельсах, и я хочу фильтровать содержимое своей страницы, используя теги muptiple. Я использую act_as_taggable_on gem, и мне удалось облако тегов и отфильтровать содержимое в соответствии с тегами. Я использовал следующий учебник (http://railscasts.com/episodes/382-tagging). Теперь мне не удалось выполнить фильтрацию с использованием нескольких тегов tag_types.Как я могу фильтровать содержимое страницы с помощью нескольких тегов

Я добавил в моей модели/article.rb следующий код

acts_as_taggable
acts_as_taggable_on: assetType,: ProductType

в контроллере я не знаю, чтобы написать несколько тегов. Я попытался следующим образом

def index 
    if (params[:assetType] and params[:productType]) 
    @articles = Article.tagged_with(params[:assetType]).tagged_with(params[:productType]) 
    else 
     @articles = Article.all 
    end 

    end 

На мой взгляд, в index.html.erb У меня есть

<div id="tag_cloud"> 
    <% tag_cloud Article.productType_counts, %w[s m l] do |tag, css_class| %> 
    <%= link_to tag.name, tag_path(tag.name), class: css_class %> 
    <% end %> 
</div> 
<div id="tag_cloud_asset"> 
    <% tag_cloud Article.assetType_counts, %w[s m l] do |tag, css_class| %> 
    <%= link_to tag.name, tag_path(tag.name), class: css_class %> 
    <% end %> 
</div> 
<div class="article-content"> 
    <% @articles.each do |article| %>  
     <h3><%= article.title %></h3> 
     <p><%= article.content %></p> 

    <% end %> 

и в моем _form у меня есть

<%= form_for(@article) do |f| %> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :content %><br /> 
    <%= f.text_area :content %> 
    </div> 
    <div class="field"> 
    <%= f.label :assetType_list, "Tags (Asset Type separated by commas)" %><br /> 
    <%= f.text_field :assetType_list %> 
    <%= f.label :productType_list, "Tags (Product Type separated by commas)" %><br /> 
    <%= f.text_field :productType_list %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 

Может кто-нибудь помочь мне, как должен ли я modilfy мой контроллер, индекс и _form страницы? Теперь она показывает все мои посты, и когда я нажимаю на бирках содержание не изменяется

ответ

1

Используя это в качестве основной точки отсчета:

https://github.com/mbleigh/acts-as-taggable-on#finding-tagged-objects

Попробуйте это:

def index 
    tags = [] 
    tags << params[:assetType] unless params[:assetType].blank? 
    tags << params[:productType] unless params[:productType].blank? 

    if tags.count == 2 
    @articles = Article.tagged_with(tags) 
    else 
    @articles = Article.all 
    end 
end 

Корректировки :

  • Проверка каждого параметра для пустой и пустой строки с использованием blan k проверка. Возможно, возможно, что в этом контексте нулевые и пустые одинаковые.
  • Добавление тегов в массив, чтобы я мог передавать их все сразу. Не просто для упрощения вызова, но вы можете иметь более явный контроль над стилем соответствия, добавляя дополнительные параметры к вызову (например, сопоставлять все или любые теги).

Надеюсь, что это поможет, удачи!

+0

большое спасибо !!!! – lucy