4

ホームコントローラーでやろうとしていることは次のとおりです。

def view
    @product= Product.find(params[:id])
    rand_price = rand(202- @product.price.to_i) + @product.price.to_i
    old_price = rand_price + @product.price.to_i

    @product << old_price  #error line
end

モデルold_priceに同じ列を追加せずに、変数にもう 1 つの値を追加したいと考えています。Productエラーは次のとおりです。

undefined method `<<' for #<Product:0x7f1362cc5b88>
4

3 に答える 3

2


モデルでシリアライザーを使用する:

class Product << ActiveRecord::Base
  serialize :prices, Array

  ...
end

データベースの列 products.prices は文字列である必要があります。

そしてコントローラーで

def update
  @product= Product.find(params[:id])
  rand_price = rand(202- @product.price.to_i) + @product.price.to_i
  new_price = rand_price + @product.price.to_i

  @product.prices << new_price
  @product.save!
end

そして、あなたはそれを使うかもしれません:

  @product.prices # => array of all prices.
  @product.prices.last # => current price
于 2013-04-20T07:04:49.893 に答える
1

あなたは言うことができます

class << @product
  attr_accessor :old_price
end
@product.old_price = old_price

インスタンス変数に属性を挿入します。

<<あなたがそれを参照している方法は、配列に値を追加しますが、これはあなたがしようとしていることではありません。

別の方法は、次を追加することです。

attr_accessor :old_price

あなたのProductモデルに。これは、テーブル内のフィールドでなくても、old_priceのすべてのインスタンスに追加されます。Product

于 2013-04-20T06:50:52.017 に答える
0

エラーです。@product は配列ではなく製品オブジェクトであるためです。

<< Array オブジェクトで使用

また、Ruby にはこの方法でプロパティを追加する権限がありません (Javascript のように)。

「old_price」の attr_accessor を宣言する必要があります

于 2013-04-20T06:51:21.907 に答える