我在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
变量?
答案 0 :(得分:1)
使用label_tag
和radio_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>