Как получить акты по тегируемым рабочим

Я новичок в ruby ​​on rails (и программировании), и это, вероятно, очень глупый вопрос. Я использую Rails 3.2 и пытаюсь использовать act_as_taggable_on для создания тегов в статьях и для отображения этих тегов в индексе статей и отображения страниц в виде интерактивных ссылок.

У меня есть теги, на которые можно щелкнуть как на страницах показа статей, так и на индексных страницах, но ссылки просто возвращаются на индексную страницу и не сортируются по имени тега. Я порылся в Интернете и собрал приведенный ниже код из разных источников, но явно что-то упустил.

Любая помощь очень ценится, так как я исчерпал свои, казалось бы, ограниченные знания! Спасибо.

Вот что у меня есть:

class ArticlesController < ApplicationController
    def tagged
        @articles = Article.all(:order => 'created_at DESC')
        @tags = Article.tag_counts_on(:tags)
        @tagged_articles = Article.tagged_with(params[:tags])  
        respond_to do |format|
          format.html # index.html.erb
          format.json { render :json => @articles }
        end 
      end

     def index
        @articles = Article.paginate :page => params[:page], :per_page => 3    
        @tags = Article.tag_counts_on(:tags)
        respond_to do |format|
          format.html # index.html.erb
          format.json { render json: @articles }
        end
      end

module ArticlesHelper
  include ActsAsTaggableOn::TagsHelper
end

class Article < ActiveRecord::Base
  acts_as_ordered_taggable
  acts_as_ordered_taggable_on :tags, :location, :about 
  attr_accessible :tag_list
  scope :by_join_date, order("created_at DESC")
end

article/index.html.erb
<% tag_cloud(@tags, %w(tag1 tag2 tag3 tag4)) do |tag| %>
<%= link_to tag.name, articles_path(:id => tag.name) %>
<% end %>

article/show.html.erb
<%= raw @article.tags.map { |tag| link_to tag.name, articles_path(:tag_id => tag) }.join(" | ") %>

Фрагмент файла route.rb

  authenticated :user do
    root :to => 'home#index'
  end

  devise_for :users
    resources :users, :only => [:show, :index]

  resources :images
  resources :articles

person Schipperius    schedule 08.07.2012    source источник
comment
пожалуйста, добавьте фрагмент из файла маршрутов   -  person Matenia Rossides    schedule 08.07.2012
comment
Кроме того, почему у вас есть @article = Article.new в вашем индексе?   -  person Matenia Rossides    schedule 08.07.2012
comment
Редактировать: добавлен фрагмент маршрута и удален @article = Article.new из индекса определения в контроллере (не помню, почему он был там, я копировал/вставлял и делать ошибки...)   -  person Schipperius    schedule 10.07.2012


Ответы (1)


Вы можете запустить «рейк-маршруты» из терминала, чтобы увидеть все ваши пути. Здесь ваши теги указывают на article_path, где вы увидите маршруты к действию index в контроллере статей («articles#index»)

Вы можете создать другой маршрут в файле route.rb, например:

match 'articles/tags' => 'articles#tagged', :as => :tagged

Поместите его выше других в файле маршрутов, если вы хотите, чтобы он имел приоритет, и помните, что вы всегда можете запустить «рейк-маршруты» в терминале, чтобы увидеть, как интерпретируются маршруты.

см. http://guides.rubyonrails.org/routing.html#naming-routes для получения дополнительной информации (может быть, прочитать все)

Другим (вероятно, лучшим) вариантом было бы объединить желаемую функциональность с действием индекса с использованием параметров, например. .../статьи?tagged=true. Затем вы можете использовать логику для определения переменной @articles в контроллере индекса на основе params[:tagged]. Простым примером может быть

 def index
    if params[:tagged]
      @articles = Article.all(:order => 'created_at DESC')
    else
      Article.paginate :page => params[:page], :per_page => 3
    end

    @tags = Article.tag_counts_on(:tags)
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @articles }
    end
  end

Это называется СУШКА вашего кода (для Don't Repeat Yourself); это избавит вас от необходимости дублировать код в действии article#tagged, что облегчит понимание и поддержку вашей кодовой базы.

Надеюсь, это поможет.

person Tyler    schedule 11.07.2012
comment
Спасибо за комментарии. Все еще не работает, но я читаю о маршрутах и ​​о том, как писать правильные методы. Надеюсь, я смогу собрать это вместе в ближайшее время. Ваше здоровье. - person Schipperius; 17.07.2012