Ответ 1
Я понял это, мой комментарий был в основном правильным, simple_form
опирается на помощники формы Rails, которые используют read_attribute
для получения значения от объекта ActiveRecord, таким образом, считывая значение в базе данных и не используя ваш метод. Симптом стойкости/домена/презентации. Способ вокруг этого:
<%= f.input :pack, :input_html => { :value => @c.pack } %>
# or
<%= f.input :pack, :input_html => { :value => f.object.pack } %>
Или, если вы хотите, чтобы это было по умолчанию, вы можете создать свой собственный построитель форм поверх simple_for
, например:
# 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
И в вашей форме:
<%= simple_form_for @c, :builder => MyFormBuilder do |f| %>
<%= f.input :pack %>
<% end %>
** в Rails 3 Я не думаю, что lib
добавлен в путь загрузки по умолчанию, поэтому вам может потребоваться добавить его и перезагрузить приложение или поместить его в app/models
(отказ от ответственности не является хорошей идеей, lib лучше).