我有一个名为'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我也收到了预期的十六进制字符串,因此我无法确定黑色(或nil)在哪里来自。
答案 0 :(得分:1)
这是一个例子
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
*如果我错了,请纠正我***
答案 1 :(得分:0)
我觉得您不是在这里返回一个字符串,而是一个对象
def color
Color.new(self[:color]) //returns object
end
也许您可以在Color类上定义to_s方法(返回十六进制),然后执行
def color
Color.new(self[:color].to_s) //returns hex
end