我有一个场地和一个事件模型。
地点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信息选择两个下拉菜单。
答案 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