创建依赖于另一个的输入

时间:2014-11-14 21:05:33

标签: ruby-on-rails

我想将一个地方与一个活动相关联,一个地方有以下字段:一个国家,一个城市,一个地址和一个名字。我想做一些事情,只要你选择一个只有遗嘱和一个城市的国家,那里只会出现(在一个下拉列表中)属于那个城市的地方,无论如何我能做到这一点吗?我的主要问题是变量:city_name,我知道我不能在这样的视图中创建变量,但我真的不知道该怎么做以及如何暂时保存它...任何帮助将不胜感激:)

这段代码不起作用,它只是我想要做的原型:

 <%= form_for @activity, :html => { :class => "form-horizontal activity" } do |f| %>
            <div class="transbox">
          <h1><%= "Add Place To activity" %></h1>
          </div>
          <div class = "box_round">
            <div class="row">
              <div class="control-group col-lg-10">
                <%= f.label "City Name", :class => 'control-label' %>
                <div class="controls">
                  //variable :city_name does not exist
                  <%= f.text_field :city_name, :class => 'form-control' %>
                </div>
                <%= error_span(@activity[:resume]) %>
              </div>
              <% if !:city_name.nil? %>
                  <div class="control-group col-lg-10">
                    <%= f.label "City Name", :class => 'control-label' %>S
                    <div class="controls">
                      <% place_options = options_from_collection_for_select(@places.where(:city => :city_name).sort { |a,b| a.name <=> b.name }, :id, :name, selected: params[:place_id]) %>
                      <%= f.select(:place_id, place_options, {prompt: 'Select Sport'},
                                   {prompt: 'Select Place', include_blank: false, class: "Place" }) %>
                      <%= link_to "Place doesn't exist yet?" , new_place_path %>
                    </div>
                    <%= error_span(@activity[:resume]) %>
                  </div>
              <% end %>
          </div>
        </div>
        </div>
        <% end %>

1 个答案:

答案 0 :(得分:1)

您正在寻找的是一种称为AJAX的请求。为你编写代码有点多,但它的要点是:

  1. 写JS观察员查看国家/地区字段。
  2. 在国家/地区更改时,向服务器发出JS调用并说:“将该国家/地区的所有城市都提供给我”
  3. 返回获取城市列表的JS并覆盖城市下拉字段中的可用选项。
  4. 您也可以选择对地方也这样做,但概念/想法是相同的。有关参考的乐趣,请查看此Railscast:http://railscasts.com/episodes/136-jquery-ajax-revised