[ruby-it] convertire una string in un campo db

David david.palm a iperbole.bologna.it
Ven 21 Dic 2007 15:00:27 CET


Per prima cosa mi sento di consigliarti di spostare il codice verso il controller (e magari anche il model) e lasciare il view il più pulito possibile. Credimi, ne va della tua salute a lungo termine! :-)

La risposta veloce è "usa send()", e cioè, togli
 <% campo = "bioex_item." + ex_field[i].to_s%>
...e la riga sotto diventa:
  <td><b><%= bioex_item.send(ex_field[i]) %></b></td>

Un modo un po' più pulito di farlo potrebbe essere:

nel controller preparare un hash sifatto:
@fields_and_labels = {
  'Data' => 'date_bio',
  'G.bianchi' => 'gb_bio',
  'Emoglobina' => 'hb_bio'
}

(ci sono probabilmente modi più furbi per assegnare label ai campi, magari facendo un override di  ActiveRecord::ConnectionAdapters::Colum#human_name)

e nella view avere qualcosa così:

<table>
 <% @fields_and_labels.each do |field_label, field_attr| %>
    <tr>
       <td><b><%=h field_label %></td>
       <% for bioex_item in @patient.bioex_items %>
         <td><b><%= bioex_item.send( field_attr ) %></td>
       <% end %>
    </tr>
  <% end %>
</table>

On Fri, 21 Dec 2007 14:37:47 +0100, harloc wrote:
> Ciao,
> forse il titolo non spiega bene quello che sto cercando.
> Ho fatto un ciclo in questo modo:
> 
> <% ex_title = ["Data", "G.bianchi", "Emoglobina"]%>
> <% ex_field = ["date_bio", "gb_bio", "hb_bio"]%>
> 
> <table>
> 	<% ex_field.length.times do |i|%>
> 	<tr>
> 		<td>
> 			<b><%=ex_title[i]%></b>
> 		</td>
> 		<% for bioex_item in @patient.bioex_items %>
> 				<% campo = "bioex_item." + ex_field[i].to_s%>	
> *** 			     <td><b><%= campo%></b></td>				
> 		<% end %>
> 		
> 	</tr>
> 	<% end%>
> </table>
> 
> dove ho posizionato gli asterischi vorrei che la stringa fosse
> convertita nel valore del campo del DB, come se
> scrivessi bioex_item.date_bio (la prima volta per esempi).
> Conoscete un metodo per fare quello che voglio?
> Grazie,
> ciao marco


Maggiori informazioni sulla lista Ml