rails select 使用


Ruby代码   收藏代码
  1. <select name="payment">  
  2.  <option value="1">VISA</option>  
  3.  <option value="2">MasterCard</option>  
  4.  <option value="3">Switch</option>  
  5. </select>  



在rails中实现这类列表框,可以使用如下几个方法 
1) 使用select 

Ruby代码   收藏代码
  1. api:  
  2. select(object, method, choices, options = {}, html_options = {})
    在ActionView::Helpers::FormOptionsHelper中定义
    • object事一个实体化变数,这里很明显的就是要摆上model物件嘛!
    • method则是object的一个属性,也是资料表中的对应项目
    • choices就是要被选的选项,可以事阵列或者事哈希(Hash)
    • options与html_options则是一些选项
  3.   
  4. 例如:  
  5. <%= select( "payment""id", { "Visa" => "1""Mastercard" => "2"}) %>  
  6.   
  7. 或者使用map填充  
  8. <%= select ("payment""id"@payments.map {|u| [u.name,u.id]}) %>  
  9.   
  10.   
  11. 对应的控制器中可以使用下列代码获取内容:  
  12. @payments = Payment.find(:all)  
  13. @selected_payment = @payments[2]  



2) 使用select_tag 

Ruby代码   收藏代码
  1. api:  
  2. select_tag(name, option_tags = nil, options = {})  
  3.   
  4. 用法如下:  
  5. <%= select_tag "payment""<option>VISA</option>" %>  
  6.   
  7. <%= select_tag "payment", options_for_select([ "VISA""MasterCard""Switch" ], "MasterCard") %>  
  8.   
  9. <%= select_tag "payment", options_for_select(%w{ VISA Mastercard Switch }) %>  
  10. %w是字符串数组的简写方式,字符串数组中的每个字符串用空格隔开  
  11.   
  12. 下面可以实现多选  
  13. <%= select_tag 'payment[]', options_for_select(@payments), :multiple => true:size => 3 %>  
  14. @payments是在控制器中定义的hash:  
  15. @payments = {'Visa' => 1, 'Mastercard' => 2, 'Switch' => 3}  
  16.   
  17. 对应的控制器中可以使用下列代码获取内容:  
  18. params[:payment]  



3)使用 collection_select 

Ruby代码   收藏代码
  1. api:  
  2. collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})  
  3.   
  4. 用法如下:  
  5. <%=   
  6. @payments=Payment.find :all  
  7. collection_select(:payment:id@payments:id:name, options ={:prompt => "-Select a payment"}, :class =>"payment") %>  
  8.   
  9. 对应的控制器中可以使用下列代码获取内容:  
  10. selected_payment = params[payment][id] 

猜你喜欢

转载自lzyfn123.iteye.com/blog/1745639