gpt4 book ai didi

ruby-on-rails - 覆盖模型属性阅读器不会影响simple_form输入字段

转载 作者:行者123 更新时间:2023-12-04 03:12:45 26 4
gpt4 key购买 nike

我正在使用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 %>

因此,它应该显示带有输入框的值为“某些值”的表格,但它为空白。为什么不使用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被添加到加载路径中,因此您可能需要添加它并重新启动应用程序或将其放入 app/models中(免责声明不是一个好主意,lib更好)。

关于ruby-on-rails - 覆盖模型属性阅读器不会影响simple_form输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com