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

ruby-on-rails-3 – 以rails形式覆盖表单字段值

发布时间:2020-12-17 01:50:15 所属栏目:百科 来源:网络整理
导读:注意:当我最初提出这个问题时,我是在思考问题.接受的答案对于我给出的示例是正确的 – 即您可以将值传递给text_field,但是我实际上遇到了date_select的问题,而date_select没有覆盖值集的工具. 因此,现在已在Rails中更新,因此您可以设置:selected = a_date,
注意:当我最初提出这个问题时,我是在思考问题.接受的答案对于我给出的示例是正确的 – 即您可以将值传递给text_field,但是我实际上遇到了date_select的问题,而date_select没有覆盖值集的工具.

因此,现在已在Rails中更新,因此您可以设置:selected => a_date,它将按预期工作.这将在Rails 4中.

我有一个可以从父模型继承其值的模型.它的工作原理如下:

class User < ActiveRecord::Base
  attr_accessible :field_name

  belongs_to :company

  def field_name
    if self['field_name'].nil?
      company['field_name']
    else
      self['field_name']
    end
  end

end

class Company < ActiveRecord::Base
  attr_accessible :field_name
end

然后,我有一个表单来编辑用户,但当然,如果用户值为nil,那么它使用公司的值填充表单,这不是我想要的.

我希望能够覆盖表单字段的值,以便如果User值为nil,则该值为空.

尝试1

理想情况下,我能做到:

<%= form_for @user do |f| %>
   <%= f.text_field :field_name,@user['field_name'] %>
<% end %>

但这不起作用,似乎没有提供覆盖值的机制.

尝试2

所以我考虑创建第二个getter / setter:

def field_name_uninherited
  self['field_name']
end

def field_name_uninherited=(value)
  self['field_name']=value
end

现在我可以使用<%= f.text_field:field_name_uninherited%>它按预期工作 – 太棒了!除外:当field_name是日期或使用多参数属性的其他类型时,会导致此错误:

1 error(s) on assignment of multiparameter attributes

我相信这是因为它不知道这是一个日期字段,因为它从数据库中推断出这一点,并且该字段(带有_uninherited后缀)不在数据库中.

所以我需要一些方法将我的附加方法标记为与原始数据库字段相同的类型.

另请注意,上述示例(使用field_name)是简化版本.我实际上使用https://github.com/colinbm/inherits_values_from来处理继承,但我不认为这对这个问题很重要.

显然,如果有更好的方法来实现同一目标,那么我全都听见了.

解决方法

那么当谈到为用户显示您的价值时,您希望它的行为有点不同?

我要做的是在表单字段中使用:value选项.这样你就可以像普通一样设置值,但是选择你想要在表单字段中显示的内容.

<%= f.text_field :company,:value => user.field_name_uninherited %>

(编辑:李大同)

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

    推荐文章
      热点阅读