【问题标题】:Displaying Posts by Tag - Ruby on Rails Blog按标签显示帖子 - Ruby on Rails 博客
【发布时间】:2012-01-16 13:14:18
【问题描述】:

我有一个很好的 Rails 博客。但是,我似乎无法让我标记的文章显示在他们自己的页面中(例如,我希望只有标记为艺术与娱乐的文章在单击该链接时显示)。

我的脚手架模型中有一个名为标签的列。它需要一个字符串。所以

1) 如何只访问特定标签?我尝试了类似以下的方法:

def self.sports
    find(:all, :tags => 'gainmuscle')
end

无济于事。

2) 如何让它们显示在视图中?

非常感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    你可以在你的控制器中定义一个类似这样的方法:

    def self.tagged_with
      @articles = Article.tagged(params[:tag]).paginate(default_paginate_options)
    end
    

    这里的taggednamedscope。您可以忽略这一点,但该操作会生成所有带有标记为:param 的文章。在这种情况下,标签是模型文章的属性。

    【讨论】:

    • 那么我如何让它显示在视图上(例如,体育文章视图,因为该视图中的文章都是标记为运动的(这是用户输入的字符串)。
    • @TopChef : 使用 :params 获取用户输入,然后在控制器中编写一个类似的方法来获取所有已标记到用户给出的标签的文章。
    【解决方案2】:

    1) 在这里您可以使用模型中的作用域:

    class YourModel < ActiveRecord::Base
    
      scope :by_tag, lambda{|tag| where(:tag => tag)}
    
      ...
    end
    

    然后在控制器中:

      @collection = YourModel.by_tag("gainmuscle")
    

    2) 我想说最好的方法是用 html 代码为 1 篇文章创建部分内容,然后以这种方式呈现:

      render :partial => 'post', :collection => @collection
    

    (您可以在此处查看部分用法:http://apidock.com/rails/ActionView/Partials

    【讨论】:

    • 我认为 OP 仍然在 Rails 2.x 上 - 我认为 'scope' 方法是在 3.0 中引入的(之前命名为 scope)。
    【解决方案3】:

    只是提到另一种方法;有很多宝石可以处理这个确切的目的。 This 可能很有趣,我个人可以投票给acts_as_taggable_on。这为您提供了很多选项,以后可能也会派上用场。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多