向collection_select选项添加按钮

Adding a button to collection_select options

提问人:rickyz 提问时间:7/30/2022 更新时间:8/15/2022 访问量:27

问:

我希望能够将collection_select中的第一个条目设置为按钮。从本质上讲,如果集合中没有合适的选项,用户应该能够单击下拉列表中的第一个选项,该选项将显示“添加新的...”打开一个模式,该模式将用于向数据库中填充collection_select选项的表添加新条目。有什么办法可以做到这一点吗?

HTML Ruby-on-Rails 集合-选择

评论

1赞 Beartech 7/30/2022
欢迎使用 Stack Overflow。你试过什么?你写了代码吗?
0赞 rickyz 8/1/2022
我是Ruby on Rails的新手,我对此做了一些研究,但我没能找到太多。我知道我可以自定义输入的类,并且我知道我可以添加将影响集合下所有选项的函数,但我找不到任何用于自定义单个选项的内容。假设它有效,我倾向于用 html 编写collection_select代码,而不是使用 Ruby 标签。

答:

0赞 Chiperific 8/15/2022 #1

我想到了两个想法。

1. 将此选项作为第一个 ID 为 0 的注入,并在控制器中捕获它

# in the controller
@select_options = ['add new...', 0]
@select_options << Book.all.pluck(:name, :id)

# form field
<%= select_tag('book',  @select_options.flatten, { include_blank: false }) %>

然后,对于提交表单数据的任何控制器操作,请检查该ID:0

if params[:book].zero?
  # user selected 'add new...'
  redirect_to create_book_path 
else
  # do the normal thing
end

2. 触发一些 JS 或 AJAX

您可以有一个侦听器函数,当用户选择“添加新的...”时触发该函数。选择。

此函数可以打开一个模式,或重定向到另一个页面,其中包含一个表单来添加新事物。