Я понял это, мой комментарий был в основном правильным, 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 лучше).
у меня такая же проблема, я думаю, 'simple_form', или скорее рельсы образуют хелперы, используйте' read_attribute' вместо ' отправить' т o получить входные значения из объектов ActiveRecord. – Kris