【问题标题】:Ruby on Rails controller order with strings带有字符串的 Ruby on Rails 控制器顺序
【发布时间】:2019-01-17 02:58:51
【问题描述】:

所以我试图组织我的观点之一,以便我网站的文章按标题名称列出。例如,我的一些文章被命名为“文章 pt.1、历史 pt.2、社会 pt.1 等”。我确实使用文章控制器中的这行代码对它们进行了正确排序

def index
    @articles = Article.order(:user_id)
end

它确实可以使用用户 ID,但如果我想添加另一个类别并按字母顺序排列,我需要更新每篇文章的用户 ID,这是不切实际的,因为它们在数据库。我想要以某种方式获取文章标题的一部分,并像我使用 user_id 字段一样对每个标题进行排序。这样我就可以使用部分字符串对每一个进行排序,例如“article pt.1”中的“article”

感谢您的阅读,祝您有美好的一天!

【问题讨论】:

  • 问题有点不清楚,您介意再详细说明一下吗?
  • @kajalojha 他说的感谢您的阅读,祝您有美好的一天!
  • 该死的,雷让我受益匪浅,哈哈。我在累的时候确实发布了这个,所以我对这个不清楚并不感到惊讶

标签: ruby-on-rails ruby computer-science


【解决方案1】:

为什么不按标题排序?假设您的文章表中有一个名为 title 的列:

按字母顺序排列

def index
  @articles = Article.order(:title)
end

按字母倒序排列

def index
  @articles = Article.order(title: :desc)
end

如果您真的只想按标题的子字符串排序。您必须在文章表中添加一个新列(在本例中称为 slug):

rails g migration AddSlugToArticles slug:text

rails db:migrate

然后你必须更新每条记录的 slug 字段

Article.all.each do |article|
  new_slug = #your code to generate substring here
  article.update(slug: my_string
end

然后按slug订购:

def index
  @articles = Article.order(:slug)
end

【讨论】:

    【解决方案2】:

    首先,您想要的输出不是很清楚,但是根据假设和帖子中提到的描述,您似乎想要对字符串字段进行排序,而不是基于整个值而是基于子字符串.

    最好使用 order 来让字符串按字母顺序排序。

    @articles = Article.order(:title)
    

    它也将达到目的,因为它首先匹配每个字符串的第一个字母,同时也处理空值。

    如果目的已通过已定义的方法实现,为什么还要编写自定义逻辑。

    【讨论】:

      【解决方案3】:

      我能够使用排序功能而不是使用文章控制器上的 :title 字段进行排序。

      def index
        @articles = Article.sort(:title)
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 2016-05-20
        • 1970-01-01
        相关资源
        最近更新 更多