1

我正在尝试显示在标签下发布的所有文章(目前,标签显示在文章索引页面上)。我可以获取文章索引页面上的所有标签。但是这些标签没有任何文章。在db中,标签和文章表之间存在关系,下面发布。请建议我如何在文章索引页面上显示标签下的所有文章。

文章控制器.rb

class ArticlesController < ApplicationController
  before_filter :is_user_admin, only: [:new, :create, :edit, :destroy]

    def is_user_admin
      redirect_to(action: :index) unless current_user.try(:is_admin?) 
      return false 
    end

      def index
          @articles = Article.all(:order => "created_at DESC")
      @article_titles = Article.first(10)
      @tags = Tag.all
      end

    def show
      @article = Article.find(params[:id])
    end

      def new
      @article = Article.new
      end
    end

tags_controller.rb

class TagsController < ApplicationController
 #before_filter :user_signed_in, only: [:destroy]

   def index
    @tags = Tag.all
   end

    def show
     @tag = Tag.find(params[:id])
    end
end

架构.rb

ActiveRecord::Schema.define(:version => 20130411074056) do

  create_table "articles", :force => true do |t|
    t.string   "title"
    t.text     "body"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.integer  "user_id"
  end

  create_table "taggings", :force => true do |t|
    t.integer  "tag_id"
    t.integer  "article_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  add_index "taggings", ["article_id"], :name => "index_taggings_on_article_id"
  add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"

  create_table "tags", :force => true do |t|
    t.string   "name"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false

article/index.html.erb(我需要在这些文章下显示标签)

 <% if !@tags.nil? %>
           <% @tags.each  do | tags | %>

           <div style="margin-top:15px; margin-left:8px"> <%= link_to tags.name, "/path1"  %></div>
           <% end%>
           <% end %>
4

3 回答 3

1

假设 Article 和 Tag 之间的关系已正确定义为has_many :through => :taggings,如下所示:

class Article < ActiveRecord::Base
  has_many :tags, :through => :taggings
end

class Tag < ActiveRecord::Base
  has_many :articles, :through => :taggings
end

并且结果的格式应如以下示例所示:

Tag 1
  Article 1
  Article 2
  Article 3
Tag 2
  Article 2
  Article 4

在articles/index.html.erb中使用以下代码来显示属于每个标签的文章:

<% @tags.each do |tag| %>
  <%= link_to tag.name, tag %>
  <% tag.articles.each do |article| %>
    <%= link_to article.title, article %>
  <% end %>
<% end %>
于 2013-04-17T10:15:52.173 回答
0

我得到了解决方案。我类似于 Sunxperous。我是这样实现的:- <% @tags.each do |tag| %> <%= link_to tag.name, tag, :class => "tag" %> <% end %>. 因为我已经在标签控制器中拥有索引和显示操作。在“标签的show.html.erb”中,我确实喜欢这样-:<% @tag.articles.each do |article| %>

  • <%= link_to article.title, article_path(article) %>
  • 于 2013-04-17T18:03:38.580 回答
    0
    class Article 
      has_many :taggings
      has_many :tags, :through => :taggings
      ....
    end
    class Taggings
      belongs_to :articles
      belongs_to :tags
      ...
    end
    class Tags
      has_many :taggings
      has_many :articles, :through => :taggings
      ...
    end
    

    现在您可以通过以下方式获取文章的所有标签以及标签中的@article.tags所有文章@tag.articles

    有关其他信息,请参阅 guides.rubyonrails.org/association_basics.html

    于 2013-04-17T10:17:12.677 回答