ruby / rails как игнорировать запятую при заказе - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть поле цены для продукта в каталоге. Иногда пользователь с правами администратора ставит запятую, имея дело с тысячами (например, 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 ]

2 голосов
/ 30 декабря 2011

Чтобы получить полный ответ - 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,999.99 по цене 1999.99.

1 голос
/ 30 декабря 2011

Вы можете использовать String.gsub для поиска запятых и замены их ничем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...