0

これが現時点での私の _form.html.erb パーシャルですが、最初に行った (領域) ドロップダウンの選択に基づいてその要素を更新したいと考えています。

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

終わり

リージョン ドロップダウン リストの値を選択する際に ajax の方法でフォームを更新するにはどうすればよいですか?

さて、ここに私の form_update アクションがあります:

 def form_update(id)
 setting = Setting.find_by_region_id(id)

   respond_to do |format|
     if setting.blank?
        @setting = Setting.first.dup
        format.json {@setting}
      else
        @setting = setting
        format.json {@setting}
      end
  end

終わり

また、prototype-Rails を使用して remote_function を機能させる必要がありました。まだ私のフィールドは更新されていません。ここで何が欠けていますか..

4

2 に答える 2

0

タグOnChangeのオプションを使用する必要がありますselect

これは[ Railsでタグを選択するためのonchangeイベントを追加する方法]に役立つはずです。

:onChangeのオプションの使用に関するより良い説明select_tagはここにあります[ http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select#51-Demo-select-onchange-invoke-an-ajax- ]

編集:

説明:ドロップダウンのオプションを選択すると、で提供されたアクションOnChangeが実行されます。これで、サーバーにajax呼び出しを行って、フィールドを更新する値を取得できます。これを行うには、必要ですremote_function(以下で説明します)。

あなたの例を考えると、次のスニペットが機能するはずです

<%= 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これには、次のようなが含まれている必要があります

:onchange => remote_function(:update => "message_id",
                             :method => "put",
                             :with => "'item=' + value",  
                             :url => { :controller => :orders, :action => :set_customer_id, :id => order.id}))

ここ:

:update:は、containが更新されるHTMLノードです。したがって、ここで使用する一意のIDを持つHTMLノードにすべての、、:city_idフィールド:mobile:telephone配置します。
:method:ルートで定義されているとおりに使用してください。GETかもしれません。
:with:リクエストで提供するいくつかの追加属性。
:url:リクエストする必要のあるURL。

それでも問題が解決しない場合は、どのように試しているかを共有してください。小さな修正で問題を解決できる可能性があります。

于 2012-08-23T08:18:39.560 に答える
0

jqueryでrailsを使用している場合は、次の
http://samuelmullen.com/2011/02/dynamic-dropdowns-with-rails-jquery-and-ajax/を試すことができます。

自分で試したわけではありませんが、面白そうですね。

于 2012-08-23T10:05:21.770 に答える