0

フォームで選択したpersonものに応じて、ラジオ オプションのリストを更新しようとしています。user

_fields.html.erb:

<%= f.label :person %>
<%= f.select(:person_id, current_user.person_names) %>

<%= f.label :invoice_type %>
<%= radio_buttons_collection(f.object.invoice_types, f) %>

application_helper.rb:

def radio_buttons_collection(types, f) # works, but not with Ajax!
  types_html = types.map do |type|
    f.radio_button(:invoice_type, type)
  end
  safe_join(types_html)
end

projects_controller.rb:

def get_invoice_types
  person = Person.find(params[:person_id])  
  @types = person.address_types
end

get_invoice_types.js.erb:

$('#project_invoice_type').html("<%= escape_javascript(radio_buttons_collection(@types, f)) %>");

アプリケーション.js:

$("#project_person_id").change(function() {
  $.ajax({
    url: '/projects/get_invoice_types',
    data: 'person_id=' + this.value,
    dataType: 'script'
  })
});

personフォームで が変更されたときにラジオ オプションが更新されないことを除いて、すべてが機能します。

誰でもこれを行う方法を教えてもらえますか?

助けてくれてありがとう。

4

2 に答える 2

1

フォームオブジェクトをヘルパーメソッドに渡さないことをお勧めします

def radio_buttons_collection(types, invoice_type)
  types_html = types.map do |type|
    radio_button_tag("project[invoice_type]", type, type == invoice_type)
  end
  safe_join(types_html)
end

請求書のタイプをタイプとともにヘルパー メソッドに渡します。

コントローラー定義で

@invoice_type = person.invoice_type

get_invoice_types.js.erb:

$('#project_invoice_type').html("<%= escape_javascript(radio_buttons_collection(@types, @invoice_type)) %>");

_fields.html.erb:

<%= f.label :invoice_type %>
<div id = 'project_invoice_type'>
  <%= radio_buttons_collection(f.object.invoice_types, f.object.invoice_type) %>
</div>
于 2013-05-20T16:50:59.497 に答える