Ruby on rails 如何在从表单中的下拉列表RubyonRails中进行选择时预先填充表单(ajax方式)?
这是我目前的_form.html.erb partial,但我希望根据我所做的第一个(区域)下拉选择更新其元素:Ruby on rails 如何在从表单中的下拉列表RubyonRails中进行选择时预先填充表单(ajax方式)?,ruby-on-rails,ajax,ruby-on-rails-3,forms,Ruby On Rails,Ajax,Ruby On Rails 3,Forms,这是我目前的_form.html.erb partial,但我希望根据我所做的第一个(区域)下拉选择更新其元素: <%= form_for(@setting) do |f| %> <div class="form"> <div class="fieldBlock"> <%= f.label :region%> <%= f.select :region_id, options_from_collection
<%= form_for(@setting) do |f| %>
<div class="form">
<div class="fieldBlock">
<%= f.label :region%>
<%= f.select :region_id, options_from_collection_for_select(Region.all, 'id', 'region_code'),
:onChange => remote_function(:update => ":mobile, :telephone", :method => "get", :url => { :controller => :Settings, :action => :form_update, :id => :region_id}) %>
</div>
<div class="fieldBlock">
<%= f.label :city_id, "City" %>
<%= f.select :city_id, options_from_collection_for_select(City.all, 'id', 'name'), :prompt => 'select a city' %>
</div>
<div class="fieldBlock">
<%= f.label :mobile, "Mobile" %> <%= f.text_field :mobile%></div>
<div class="fieldBlock">
<%= f.label :telephone, "Telephone No" %> <%= f.text_field :telephone %></div>
<div class="fieldBlock">
<% f.submit "Update Contact" %>
At present this is the controller method that helps in prepopulating:
def index
setting = Setting.find_by_user_id(current_user.id)
if setting.blank?
@setting = City.first.dup
else
@setting = setting
end
结束
我还必须使用原型Rails来实现远程功能。仍然没有更新我的字段,我在这里缺少了什么。您需要使用
选择标记的OnChange
选项
这应该有帮助[]
使用的更好解释是:选择标签的onChange
选项在这里[]
编辑:
说明:当您选择下拉列表中的任何选项时,将执行OnChange
中提供的操作。现在,您可以对服务器进行ajax调用,以获取要更新字段的值。为此,您需要远程功能
(如下所述)
考虑到您的示例,下面的代码段应该可以工作
<%= form_for(@setting) do |f| %>
<div class="form">
<div class="fieldBlock">
<%= f.label :region%>
<%= f.select :region_id, options_from_collection_for_select(Region.all, 'id', 'region_code'),
:onchange => remote_function( ... ... ...) %>
</div>
<% end %>
在这里:
:update
:是将更新其内容的HTML节点。因此,请将所有:city\u id
,:mobile
,:telephone
字段放在一个HTML节点中,该节点具有您将在此处使用的唯一id。
:方法
:只需按照路线中的定义使用即可。可能会得到
:with
:请求中提供的一些额外属性
:url
:您必须请求的url
如果这仍然没有帮助,请分享你是如何尝试的。可能是一个小补丁可以解决问题。如果您将rails与jquery一起使用,您可以尝试以下方法
虽然我自己没有试过,但听起来很有趣。请你再描述一下,他们提到的内容都很简短,没有用,我在主要问题中添加了更多细节,包括控制器操作和更改。请看一看我发现的一个问题是:update
这里您需要提供一个html id。例如,
并且您使用:update=>“region\u options”
也form\u update
函数应该用更新的值呈现此div中的内容。最后,remote\u函数将用响应替换div[@id=“region\u options”]的内容,您将看到更新的值。请复制并粘贴代码>文本编辑器中的零件,以便更好地理解。我将尝试制作一个最简单的应用程序来演示它。但这可能需要时间。
<%= form_for(@setting) do |f| %>
<div class="form">
<div class="fieldBlock">
<%= f.label :region%>
<%= f.select :region_id, options_from_collection_for_select(Region.all, 'id', 'region_code'),
:onchange => remote_function( ... ... ...) %>
</div>
<% end %>
:onchange => remote_function(:update => "message_id",
:method => "put",
:with => "'item=' + value",
:url => { :controller => :orders, :action => :set_customer_id, :id => order.id}))