在表单下拉菜单中显示货币符号

时间:2016-08-11 12:56:28

标签: ruby-on-rails

我在商务应用程序中有一个表单,用户可以在其中添加商品列表。

在此创建#项目表单中,我希望用户能够(从下拉菜单中)选择其定价的货币。

我创建了货币模型,视图和控制器,以便管理员可以添加货币类型。 (我希望管理员能够限制货币类型)。

以下是货币迁移文件:

class CreateCurrencies < ActiveRecord::Migration
  def change
    create_table :currencies do |t|
      t.string :name
      t.string :symbol

      t.timestamps null: false
    end
  end
end

(“符号”是包含currency HTML code)的字符串

我在db中将Currency和Item与belongs_to / has_many关系连接起来。然后,我在create#item表单中实现了一个下拉菜单,用户可以在其中选择货币。

我的问题是,如何在下拉菜单中显示货币符号?

这是我尝试过的。

<%= f.collection_select :currency, Currency.order(:name),:id, "#{:symbol}".html_safe %>

问题是,这并没有像我希望的那样显示货币符号;它只显示输入的字符串(货币HTML代码)。

例如,使用代码,如果管理员输入$(&amp;#36)的货币HTML代码,则下拉列表显示“&amp;#36”而不是预期的“$”)

提前致谢!!

2 个答案:

答案 0 :(得分:1)

快速回答是:使用raw方法来取消html代码。

我刚刚在我的机器上复制了你的代码并注意到了一种奇怪的行为。

出于某种原因,raw无法与collection_select一起使用,我无法理解原因。考虑使用select帮助程序和“手动”迭代您的集合。这是两个相同的变体:

= form_for "test" do |f|
  %p collection_select variant
  = f.collection_select :currency, User.all, :id, raw(:symbol.to_s)
  %p select variant (works!)
  = f.select("currency", User.all.collect {|u| [ raw(u.symbol), u.id ] })

enter image description here

答案 1 :(得分:0)

您可以使用HTMLEntities gem。我建议将其设置为可在视图中使用的辅助方法。

帮助文件

def currency_symbol(currency_code)
  HTMLEntities.new.decode(currency_code)
end