我在目录中有产品的价格字段。有时管理员用户在处理成千上万时会使用逗号(例如:10,000美元),有时他只需要6000美元。虽然我想简单地告诉他这样或那样做,但我也想以编程方式解决这个问题。
负责#show的行动在这里:
def show
@category = Category.find_by_url_name(params[:category_id])
@brand = Brand.find(params[:id])
@search = Product.find(:all, :conditions => ['brand_id = ? and category_id = ?', @brand.id, @category.id],
:order=> params[:order] || 'price DESC')
@products = @search.paginate(:page => params[:page], :per_page => 12 )
@meta_title = "#{@brand.name}"
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @brand }
end
end
我的应用程序帮助程序中还有一个sort_options帮助程序,它为站点用户提供了排序选项:
def product_sort_options
options_for_select([
['', nil],
['Newest to Oldest', 'descend_by_date'],
['Oldest to Newest', 'ascend_by_date'],
['Price: Highest to Lowest', 'descend_by_price'],
['Price: Lowest to Highest', 'ascend_by_price'],
['Name', 'ascend_by_name']
])
end
任何想法?
答案 0 :(得分:2)
要使其成为完整答案 - price
不应该是字符串。您现在拥有300种产品这一事实并不是什么大问题。
进行迁移:
rails generate migration decimalise
然后编辑它(db/migrate/*decimalise.rb
),并写下这样的内容:
class Decimalise < ActiveRecord::Migration
def up
connection = ActiveRecord::Base.connection()
# kill the weird chars in the string field
connection.execute("UPDATE products SET price = REPLACE(REPLACE(price, ',', ''), '$', '')")
# convert the string column into a decimal one
change_table :products do |t|
# adjust for your use case - this gives you values up to 9999999.99
# if you need more, increase the 10
t.column :price, :decimal, :precision => 10, :scale => 2
end
end
def down
change_table :products do |t|
t.column :price, :string, :limit => 10
end
end
end
然后最后,运行
rake db:migrate
(未经测试,您可能需要进行调整。也可以在任何修补之前备份您的数据库 - 我不对您遭受的任何数据丢失负责)
编辑我忘记了一件事:如何打印出来。
<%= number_to_currency @product.price %>
应该以{{1}}的价格为您提供$1,999.99
之类的内容。
答案 1 :(得分:1)
您可以使用String.gsub搜索逗号并将其替换为空。