gpt4 book ai didi

ruby-on-rails-3 - 覆盖 rails 表单中的表单字段值

转载 作者:行者123 更新时间:2023-12-04 07:06:27 27 4
gpt4 key购买 nike

注:当我最初问这个问题时,我想多了。接受的答案对于我给出的例子是正确的 - 即你可以通过 :value到 text_field,但实际上我遇到了 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,则该值为空。

尝试 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)时,您希望它的行为有所不同吗?

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

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

关于ruby-on-rails-3 - 覆盖 rails 表单中的表单字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14304696/

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