按外部属性排序 rails collection_select 下拉字段
Sort rails collection_select dropdown field by foreign attribute
我有一个 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,文本方法,将是 posts 模型中的一个虚拟方法,返回类似 "John Doe: Random thoughts" 的内容,这实际上是该排序标准的原因...)
有没有想过如何在没有大连接、数据库视图和类似东西的情况下解决这个问题?
假设一个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 %>
我有一个 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,文本方法,将是 posts 模型中的一个虚拟方法,返回类似 "John Doe: Random thoughts" 的内容,这实际上是该排序标准的原因...)
有没有想过如何在没有大连接、数据库视图和类似东西的情况下解决这个问题?
假设一个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 %>