分类!似乎忽略了自定义属性

时间:2014-07-04 13:36:03

标签: ruby-on-rails

我有这种方法可以放置'在字符串的末尾,如果它位于Novel.class中的字符串的开头:

def sort_name
    display_name = self.name
    if display_name.match(/^the/i)
      arr = display_name.split(/^the/i)
      display_name = "#{arr[1]}, The"
    end
    display_name

我在NovelController中有这个索引方法:

def index
  @novels = Novel.all

  @novels.to_a.sort! { |a,b| a.sort_name.downcase <=> b.sort_name.downcase }

  respond_to do |format|
    format.html # index.html.erb
    format.json { render :json => @novels }
  end
end 

在视图中,我只显示sort_name。正在显示sort_name,但小说仍按name排序。有没有人看到一个缺陷?感谢。

1 个答案:

答案 0 :(得分:3)

这里的问题是被排序的数组被丢弃。

@novels.to_a

这会返回一个临时数组(不会保存在任何地方)。那个临时数组然后就地排序并被遗忘,因为你没有任何引用它。

解决方案:将其保存到变量中。

@novels = Novel.all.sort { |a,b| a.sort_name.downcase <=> b.sort_name.downcase }

此外,您的sort_name代码中存在错误。它返回如下值:

# for name "The Yellow God"
display_name # => " Yellow God, The"