【问题标题】:Rails 3.2.12 select second element in a form dependant on first collection_select's choiceRails 3.2.12 根据第一个 collection_select 选择在表单中选择第二个元素
【发布时间】:2013-11-17 22:47:16
【问题描述】:

我有一个场地和一个活动模型。

地点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) %>

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

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • 我能够重新设计我的活动的创建方法,以通过场地的参数实现名称和地址的保存。
【解决方案2】:

在浏览了网络,并询问了我的一些朋友谁比我更擅长使用 Rails 之后,我找到了一个无 Javascript 的解决方案,可以完美地解决我的问题。

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

然后我使用了 collection_select,它使用了我设置的 belongs_to 关系中的 Event 的 :venue_id

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

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

所以现在当一个事件被创建时,它是使用场地的:name:address 构建的

【讨论】:

    猜你喜欢
    • 2015-10-15
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多