我想通了,我的评论基本上是正确的,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 更好)。