rails 表单助手 color_field 未拉取值

问题描述 投票:0回答:3

我有一个名为“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 我也会按预期收到十六进制字符串,所以我无法弄清楚黑色(或零)在哪里来自。

ruby-on-rails form-helpers
3个回答
3
投票

颜色字段

这是一个例子

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

*如果我错了请纠正我***


0
投票

我有一种感觉,你在这里返回的不是字符串而是一个对象

def color
   Color.new(self[:color]) //returns object
end

也许你可以在 Color 类上定义一个 to_s 方法(返回十六进制),然后执行

def color
  Color.new(self[:color].to_s) //returns hex
end

0
投票

您需要添加一个以十六进制表示的颜色值:

值:“##{@banner.body_color}”

© www.soinside.com 2019 - 2024. All rights reserved.