ruby-on-rails – 覆盖模型属性读者不会影响simple_form输入字段
发布时间:2020-12-16 21:39:07 所属栏目:百科 来源:网络整理
导读:我使用simple_form并且想覆盖读者的模型属性. 因此以下不行 class C ActiveRecord::Base # it has attribute named pack def pack "Some value" endend 鉴于以下代码 %= simple_form_for @c do |f| % %= f.input :pack %% end % 因此它应该显示具有值“Some
我使用simple_form并且想覆盖读者的模型属性.
因此以下不行 class C < ActiveRecord::Base # it has attribute named pack def pack "Some value" end end 鉴于以下代码 <%= simple_form_for @c do |f| %> <%= f.input :pack %> <% end %> 因此它应该显示具有值“Some value”的输入框的形式,但它是空白的.为什么不用simple_form覆盖? 解决方法
我想到这一点,我的评论基本上是正确的,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默认添加到加载路径,所以你可能需要添加它并重新启动应用程序或将其放在应用程序/模型中(免责声明不是一个好主意,lib更好). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |