L'ho capito, il mio commento era fondamentalmente corretto, simple_form
si appoggia su help di guide Rails che usano read_attribute
per ottenere il valore da un oggetto ActiveRecord leggendo il valore nel database e non utilizzando il metodo. Un sintomo di accoppiamento persistenza/dominio/presentazione. Il modo per aggirare questo è:
<%= f.input :pack, :input_html => { :value => @c.pack } %>
# or
<%= f.input :pack, :input_html => { :value => f.object.pack } %>
Oppure, se si desidera che questo comportamento di default di essere è possibile creare il proprio costruttore di form in cima simple_for
quali:
# lib/my_form_builder.rb **
class MyFormBuilder < SimpleForm::FormBuilder
def input(attribute_name, options={}, &block)
options[:input_html] ||= {}
options[:input_html][:value] = object.send(attribute_name)
super(attribute_name, options, &block)
end
end
E nel modulo:
<%= simple_form_for @c, :builder => MyFormBuilder do |f| %>
<%= f.input :pack %>
<% end %>
** in Rails 3 non credo lib
si aggiunge al percorso di carico di default quindi potrebbe essere necessario aggiungere esso e si riavvia app o metterlo in app/models
(la dichiarazione di non responsabilità non è una buona idea, la lib è migliore).
ho lo stesso problema, la mia ipotesi è 'simple_form', o più probabilmente rotaie formare aiutanti, usare' read_attribute' invece di ' S fine' per ottenere i valori di input dagli oggetti ActiveRecord. – Kris