注意:当我最初提出这个问题时,我是在思考问题.接受的答案对于我给出的例子是正确的 - 即你可以传递: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
Run Code Online (Sandbox Code Playgroud)
然后,我有一个表单来编辑用户,但当然,如果用户值为零,那么它使用公司的值填充表单,这不是我想要的.
我希望能够覆盖表单字段的值,以便如果User值为nil,则该值为空.
尝试1
理想情况下,我能做到:
<%= form_for @user do |f| %>
<%= f.text_field :field_name, @user['field_name'] %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但这不起作用,似乎没有提供覆盖值的机制.
尝试2
所以我考虑创建第二个getter/setter:
def field_name_uninherited
self['field_name']
end
def field_name_uninherited=(value)
self['field_name']=value
end
Run Code Online (Sandbox Code Playgroud)
现在我可以使用<%= f.text_field :field_name_uninherited %>它并按预期工作 - 太棒了!除以下:何时field_name是日期或使用多参数属性的其他类型时,会导致此错误:
1 error(s) on assignment of multiparameter attributes
Run Code Online (Sandbox Code Playgroud)
我相信这是因为它不知道这是一个日期字段,因为它从数据库中推断出这一点,并且该字段(带有_uninherited后缀)不在数据库中.
所以我需要一些方法将我的附加方法标记为与原始数据库字段相同的类型.
另请注意,上述示例(使用field_name)是简化版本.我实际上使用https://github.com/colinbm/inherits_values_from来处理继承,但我不认为这对这个问题很重要.
显然,如果有更好的方法来实现同一目标,那么我全都听见了.
dig*_*tie 12
那么当谈到为用户显示您的价值时,您希望它的行为有点不同?
我要做的是在:value表单字段中使用该选项.这样你就可以像普通一样设置值,但是选择你想要在表单字段中显示的内容.
<%= f.text_field :company, :value => user.field_name_uninherited %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12546 次 |
| 最近记录: |