Rails表单助手color_field不能通过拉取值

时间:2018-09-20 08:48:43

标签: ruby-on-rails form-helpers

我有一个名为'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)在哪里来自。

2 个答案:

答案 0 :(得分:1)

color_field

这是一个例子

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