【问题标题】:rails form helper color_field not pulling value throughrails form helper color_field没有通过
【发布时间】: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)在哪里来自。

【问题讨论】:

  • &lt;%= f.color_field :color, value: @category.color%&gt;你能试试这个吗?
  • 是的,效果很好。虽然我很好奇为什么需要直接调用该值。我希望 color_field 助手必须以意想不到的方式调用 :color 方法?如果我将模型中的颜色定义为纯字符串:def color "#FF0000' end 它可以通过,所以它必须与它在自定义类中有关?
  • @category 是新记录吗?还是现有记录?
  • 您是否允许我为它写答案,对于未来的 SO 搜索者也是如此?
  • 在这种情况下,它是现有记录,但新记录也会发生同样的情况。是的,我很高兴你能写出答案。

标签: ruby-on-rails form-helpers


【解决方案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

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

【讨论】:

  • 但是为什么不从color方法中取值呢?
  • @Joel_Blum 类别模型中定义的颜色方法有问题。
  • 谢谢,我将把它标记为正确,因为它解决了问题,但错误似乎在我的 Color 类中的某个地方返回一个对象而不是一个字符串。
【解决方案2】:

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

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

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

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

【讨论】:

  • 好吧,这似乎与它有关。问题是我需要颜色来完全像一个字符串,但有一些额外的方法。即我需要能够调用@category.color.inverse 来返回颜色的反色。显然,如果我在 getter 方法中设置 to_s,这将不起作用。我可能在这里搞糊涂了。
  • 在这种情况下,使用@Gabbar 的解决方案可能是最简单的。如果您想要一种更规范的方式来执行此操作,请查看api.rubyonrails.org/classes/ActiveRecord/Attributes/…,因为它非常接近您想要做的事情。
  • 谢谢。目前我刚刚从 String 中删除了继承并手动添加了我需要的方法,这一切似乎都有效。
猜你喜欢
  • 1970-01-01
  • 2012-03-08
  • 2015-12-07
  • 1970-01-01
  • 2011-01-16
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多