【发布时间】:2018-09-20 08:48:43
【问题描述】:
我有一个名为“Color”的类,它继承自 String,它接受并返回一个颜色十六进制字符串。
我有以下型号
class Category < ActiveRecord::Base
def color
Color.new(self[:color])
end
end
我对类别编辑表单有以下视图:
<%= form_for @category, url: @category do |f| %>
<%= f.label :color %>:
<%= f.color_field :color %>
<% end %>
无论我为类别设置什么“颜色”,color_field 总是返回黑色。我猜 nil 正在被传递给该字段,而黑色只是默认值?
奇怪的是,如果我将 color_field 更改为 text_field,十六进制字符串会按预期通过。如果我调用 @category.color、@category::color、@category[:color] 或 @category.send :color 我也会按预期收到十六进制字符串,所以我无法确定黑色(或 nil)在哪里来自。
【问题讨论】:
-
<%= f.color_field :color, value: @category.color%>你能试试这个吗? -
是的,效果很好。虽然我很好奇为什么需要直接调用该值。我希望 color_field 助手必须以意想不到的方式调用 :color 方法?如果我将模型中的颜色定义为纯字符串:
def color "#FF0000' end它可以通过,所以它必须与它在自定义类中有关? -
@category是新记录吗?还是现有记录? -
您是否允许我为它写答案,对于未来的 SO 搜索者也是如此?
-
在这种情况下,它是现有记录,但新记录也会发生同样的情况。是的,我很高兴你能写出答案。
标签: ruby-on-rails form-helpers