Ruby on rails 如何在从表单中的下拉列表RubyonRails中进行选择时预先填充表单(ajax方式)?

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.html.erb partial,但我希望根据我所做的第一个(区域)下拉选择更新其元素:

<%= 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}))