我有一个collection_select,我想对它进行排序。
通常没问题,只需将collection.order(name DESC)
或其他任何内容传递到collection_select的集合字段中。
不幸的是,我的排序标准是外来属性,类似于: (说我们有帖子和作者模型,我想根据作者姓名对帖子进行排序)
f.collection_select(:post, :post_id, Posts.order(author.name DESC), :id, :post_with_author_name_as_prefix)
......当然不起作用。
(post_with_author_name_as_prefix,文本方法,将是帖子模型中的虚拟方法,返回类似“John Doe:Random ideas”的内容,这实际上是排序标准的原因......)
如果没有大的连接,数据库视图和类似的东西,那么如何解决这个问题?
答案 0 :(得分:1)
假设Post
属于Author
,您可以这样做:
Post.joins(:author).order("authors.name DESC")
你应该给它一个名字,让它成为Post
模型的一部分:
class Post < ActiveRecord::Base
belongs_to :author
scope :ordered_by_author, -> { joins(:author).order("authors.name DESC") }
...
end
并在视图中使用:
<%= f.collection_select :post_id, Post.ordered_by_author, :id, :post_with_author_name_as_prefix %>