如何在Rails中生成radio_buttons的哈希?

时间:2013-03-04 20:04:48

标签: ruby-on-rails ajax ruby-on-rails-3 jquery ruby-on-rails-3.2

我在Rails中有一个ajax函数,它根据在表单中选择的person更新选项哈希:

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

# get_invoice_types.erb
$('#project_invoice_type').html("<%= escape_javascript(options_for_select(@types)) %>");

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

是否有一种简单的方法可以生成radio_buttons而不是options_for_select的列表?

如果是这样,怎么办呢?

感谢您的帮助。

这是用于生成我最终得到的无线电盒的功能:

def collection_radio_buttons(types, f) # works!
  types_html = types.map do |type|
    content_tag :span, :class => "radio_option" do
      f.radio_button(:invoice_type, type) + localize_address_type(type)
    end
  end
  safe_join(types_html)
end

但是,我不能通过上面的Ajax函数来获取它。我想这是由于传递给函数的f变量?

1 个答案:

答案 0 :(得分:1)

使用label_tagradio_button_tag编写您的打开助手并循环浏览元素。

<强>更新

这样的东西?

#Helper
  def radio_boxes(name, *items)
    content_tag :div do
      items.collect do |item|
        content_tag :label, item.first
        radio_button_tag(name, item.last) + label_tag("#{name}_#{item.last}", item.first)
      end.join("\n").html_safe
    end
  end

#View
<%= radio_boxes('countries', ['Lisbon', 1], ['Madrid', 2]) %>

#Output
<div>
  <input id="countries_1" name="countries" type="radio" value="1"><label for="countries_1">Lisbon</label>
  <input id="countries_2" name="countries" type="radio" value="2"><label for="countries_2">Madrid</label>
</div>