我在商务应用程序中有一个表单,用户可以在其中添加商品列表。
在此创建#项目表单中,我希望用户能够(从下拉菜单中)选择其定价的货币。
我创建了货币模型,视图和控制器,以便管理员可以添加货币类型。 (我希望管理员能够限制货币类型)。
以下是货币迁移文件:
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”而不是预期的“$”)
提前致谢!!
答案 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 ] })
答案 1 :(得分:0)
您可以使用HTMLEntities gem。我建议将其设置为可在视图中使用的辅助方法。
帮助文件
def currency_symbol(currency_code)
HTMLEntities.new.decode(currency_code)
end