【问题标题】:Customizing the text in a collection_select dropdown自定义 collection_select 下拉列表中的文本
【发布时间】:2016-09-16 23:29:58
【问题描述】:

我有一个 collection_select 下拉列表,其中包含如下名称:

<%= f.collection_select(:person_id, Person.all, :id, :name) %>

但是我有一个指向他们所属组的人的外键。在下拉列表中,我想像这样显示人名和他们旁边的组:

保罗(高尔夫球手) 凯文(水手)

等等……

这可以使用 collection_select 吗?

【问题讨论】:

  • 我认为如果你使用像 "#{:name} (#{id.group})" 这样的字符串插值,那么你可以。

标签: ruby-on-rails collection-select


【解决方案1】:

这实际上很简单。您只需要在要从中提取的模型上编写一个方法,该方法会格式化您想要在下拉列表中的字符串。所以,来自documentation

class Post < ActiveRecord::Base
  belongs_to :author
end

class Author < ActiveRecord::Base
  has_many :posts

  def name_with_initial
    "#{first_name.first}. #{last_name}"
  end
end

然后,在您的 collection_select 中调用该方法,而不是调用名称或您之前出现的任何名称。

collection_select(:post, :author_id, Author.all, :id, :name_with_initial)

事后看来很明显。

【讨论】:

  • 有没有办法让下拉列表填充与帖子关联的当前作者?我试过 :selected 没有成功。
  • 如果您使用 form_for 表单构建器,它应该在更新/编辑视图时自动填充数据库中已有的值。你会想要使用 form_for :post { |f| f.collection_select ... }
  • 我认为使用它确实是一个很好的做法。它只是让助手无用
【解决方案2】:

你试过了吗:

<%= f.collection_select(:person_id, Person.all.collect { |p| ["#{p.name}(#{p.group})", p.id ] } ) %>

【讨论】:

  • 是的,刚刚试过。出现错误:参数数量错误(给定 2,预期 4..6)
猜你喜欢
  • 2014-12-21
  • 2022-08-05
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多