我有一个名为“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 被传递到该字段,而 black 只是默认值?
奇怪的是,如果我将 color_field 更改为 text_field,十六进制字符串将按预期显示。如果我调用 @category.color、@category::color、@category[:color] 或 @category.send :color 我也会按预期收到十六进制字符串,所以我无法弄清楚黑色(或零)在哪里来自。
这是一个例子
f.color_field :color
# => <input id="color" name="color" type="color" value="#000000" />
所以默认情况下需要
value="#000000"
来覆盖它需要显式传递
<%= f.color_field :color, value: @category.color%>
参考:- http://railsdoc.com/references/color_field
*如果我错了请纠正我***
我有一种感觉,你在这里返回的不是字符串而是一个对象
def color
Color.new(self[:color]) //returns object
end
也许你可以在 Color 类上定义一个 to_s 方法(返回十六进制),然后执行
def color
Color.new(self[:color].to_s) //returns hex
end
您需要添加一个以十六进制表示的颜色值:
值:“##{@banner.body_color}”