加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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更好).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读