ruby / rails如何在订购时忽略逗号

时间:2011-12-30 17:00:56

标签: ruby-on-rails

我在目录中有产品的价格字段。有时管理员用户在处理成千上万时会使用逗号(例如: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

任何想法?

2 个答案:

答案 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搜索逗号并将其替换为空。