Rails 3.2.12在表单中选择第二个元素,这取决于第一个collection_select的选择

时间:2013-11-17 22:47:16

标签: jquery ruby-on-rails forms ruby-on-rails-3.2

我有一个场地和一个事件模型。

地点has_many :events和活动belongs_to :venue

我的场地有:venue_name:address

我的活动是一种属性安排,:venue_name:address也是如此。

创建新事件时,我使用了一个集合,如下所示:

<%= f.label :venue_name %>
<%= f.collection_select(:venue_name, Venue.order(:id), :venue_name, :venue_name) %>

使用已存在的场地设置事件:venue_name

接下来我使用类似的方法来设置事件的地址,从现有的Venue中提取它,如下所示:

<%= f.label :address %>
<%= f.collection_select(:address, Venue.order(:id), :address, :venue_name) %>

我希望它能够识别第一个选择,并能够自动选择相同的Venue :address,这样我就可以在幕后设置它,而不是强迫用户为相同的Venue信息选择两个下拉菜单。

2 个答案:

答案 0 :(得分:0)

有很多方法可以管理这种类型的功能。

一种方法是在选择场地时设置onChange事件。 Rails没有帮助为单个表单元素创建这些,但jQuery选择器应该可以正常工作。此触发器可以调用您的Rails应用程序来获取具有场地地址集合的部分。或者,您可以将所有可能的场地地址存储在隐藏的div中,并在选择场地后更新此选择器的内容。

这个Rails cast应涵盖这些概念。

答案 1 :(得分:0)

在浏览网页后,向我的一些朋友询问哪些人比我更好,我找到了一个无法解决问题的Javascript解决方案。

我从事件的模型中删除了:venue_name:address.

然后我使用collection_select使用我设置的:venue_id关系中的事件belongs_to

在Event的create方法中,我添加并编辑了以下行,以便在创建新事件时使用它:

@venue = Venue.find(params[:venue_id])
@event = @venue.events.build(params[:event])

现在,当创建一个事件时,它是使用Venue的:name:address

构建的。