【发布时间】:2015-07-13 05:05:14
【问题描述】:
我有一个 simple_form 输入字段,它是我需要在触发 onchange 事件时异步更新的表单的一部分。
我需要更新的字段显示为一个选择框,因为它是一个集合。但是该集合表示嵌套集合模型的记录。因此,当用户选择一个特定值时,我希望能够更新同一个字段及其子字段,并让用户可以选择选择任何子字段作为同一字段的值。
问题是,我如何只更新该字段而不触及表单的其余部分。
只是为了说明我当前的设置: 表单看起来像这样:
<%= simple_form_for @product, html: {class: 'form-horizontal'} do |f| %>
<%= f.input :product_name %>
<%= f.association :location, collection: @locations, input_html: { data: {remote: :true, url: "/update_locations"} } %>
<%= f.submit 'Post', class: 'btn btn-default btn-lg' %>
<% end %>
@product 是一个新的产品,属于 位置 , @locations 是 Location 的集合,每个 has_many Product 因此使用 simple_form association 方法 位置也 acts_as_nested_set
我的 routes.rb 中有这个
get 'update_locations' => 'products#update_locations'
我需要帮助来完成控制器操作:
def update_locations
@product = Product.new
@location = Location.find_by_id(params[:product][:location_id])
@locations = @location.children
# TODO: render code that updates the simple_form field with
# the new @locations collection
end
我不确定上面的控制器应该呈现的部分视图中应该包含什么代码。
【问题讨论】:
-
如果您使用 js 事件触发该查询,您能否在客户端完成其余工作并完全避免异步调用?如果您不需要快速(或根本)保留所有这些位置,是否可以在做出最终选择后这样做?
-
@jmargolisvt 我曾考虑过这一点,但所有这些都是在客户端完成的,但这需要将更多数据加载到视图中并编写更多代码来处理可以复制已经存在的功能的值模型中的服务器端,但我终于找到了一种方法,在下面的回答中进行了解释。
标签: jquery ruby-on-rails ajax simple-form nested-set-model