首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >grouped_collection_select的自定义数据属性

grouped_collection_select的自定义数据属性
EN

Stack Overflow用户
提问于 2013-08-21 18:18:41
回答 1查看 902关注 0票数 3

grouped_collection_select接受九个参数,包括一个options属性。如何在选项(数据标记)中添加自定义属性,以便在选择选项时使用?

自现在起,select被编码为:

代码语言:javascript
运行
复制
= f.grouped_collection_select :course_id, Discipline.order(:name), :courses, :name, :id, :display

我希望添加一个自定义数据属性,以便输出如下所示:

代码语言:javascript
运行
复制
<select id="enrollment_course_id" name="enrollment[course_id]">
    <option selected="selected" value="7" data-duration=8>Introduction to Guitar (8 weeks)</option>
    <option value="8" data-duration=8>Strings 1-3 (8 weeks)</option>
    <option value="9" data-duration=10>Strings 4-6 (10 weeks)</option>
    <option value="10" data-duration=12>Basic Chords (12 weeks)</option>
</select>

如何以编程方式生成自定义属性?

EN

回答 1

Stack Overflow用户

发布于 2016-01-02 21:23:59

似乎没有一个好的和适当的记录方式来做这件事。

解决方案1.使用未完整记录的grouped_collection_select特性:

代码语言:javascript
运行
复制
f.grouped_collection_select :course_id, Discipline.order(:name), :courses_with_duration_data, :name, ->(el){el.first.id}, ->(el){el.first.display}

您需要像这样实现courses_with_duration_data

代码语言:javascript
运行
复制
class Discipline
  has_many :courses
  def courses_with_duration_data
    courses.map {|course| [course,{data: {duration: course.duration}}]}
  end
end

它依赖于,如果将数组数组传递给选择,数组中的散列将被视为html选项。

它的缺点是将视图相关的方法放置到模型中。它可能会与未来的rails版本背道而驰,因为这种使用并没有在grouped_collection_select上被记录下来,所以您最好自己生成这些选项。

解决方案2.自己重新实现选项:

在助手中重新实现自定义option_groups_from_collection_for_select。这可能是这样的:

代码语言:javascript
运行
复制
def options_for_disciple_with_courses(disciplines)
  disciplines.map do |discipline|
    option_tags = options_for_select(
      discipline.courses.map {|course| [course.display, course.id, {data: {duration: course.duration}}]}
    )
    content_tag(:optgroup, option_tags, label: discipline.name)
  end.join.html_safe
end

你的看法是:

代码语言:javascript
运行
复制
f.select :course_id, options_for_disciple_with_courses(Discipline.order(:name))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18364876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档