我有这种方法可以放置'在字符串的末尾,如果它位于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
排序。有没有人看到一个缺陷?感谢。
答案 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"