0

メソッドから複数の変数をRailsビューに戻す必要があります...しかし、どうすればこれを行うことができますか?

たとえば、今私は持っています

def my1
 @price = 1
 @price
end

しかし、どうすれば他の値を返すことができますか?

def my1
 @qnt = 2
 @price = 1
 @price, @qnt
end

?

また、私の考えは、それらを次のように文字列に分割することです

@price + "/-/" + @qnt

ビューで /-/ を介してそれらを分割するだけです....しかし、これは悪い習慣です...では、1つのメソッドから2つ以上の変数を取得するにはどうすればよいですか?

4

3 に答える 3

2

配列を返します:

def my1
 qnt = 2
 price = 1
 [price, qnt]
end

次に、これを行うことができます:

p, q = my1() # parentheses to emphasize a method call
# do something with p and q

オプション 2

または、次のようにカスタム オブジェクトを返すこともできます。

require 'ostruct'

def my1
 qnt = 2
 price = 1

 OpenStruct.new(price: price, quantity: qnt)
end


res = my1() # parentheses to emphasize a method call

res.quantity # => 2
res.price # => 1
于 2013-01-31T11:43:26.907 に答える
0

変数を保持して返す別のオブジェクトを使用します。その後、そのオブジェクトから変数にアクセスできます。

于 2013-01-31T11:44:13.833 に答える
0

配列

最も簡単な方法はArrayを返すことです:

def my1
  @qnt = 2
  @price = 1
  [ @price, @qnt ]
end

price, quantity = my1

ハッシュ

しかし、 Hashを返すこともできます:

def my1
  @qnt = 2
  @price = 1
  { :quantity => @qnt, :price = @price
end

return_value = my1

price = return_value[:price]
quantity = return_value[:quantity]
# or
price, quantity = [ return_value[:price], return_value[:quantity] ]

カスタムクラス

またはカスタム クラス:

class ValueHolder
  attr_reader :quantity, :price

  def initialize(quantity, price)
    @quantity = quantity
    @price = price
  end
end

def my1
  @qnt = 2
  @price = 1
  ValueHolder.new(@qnt, @price)
end

value_holder = my1

price = value_holder.price
quantity = value_holder.quantity
# or
price, quantity = [ value_holder.price, value_holder.quantity ]

OpenStruct

Sergioが言及したように、 OpenStructを使用できます。

于 2013-01-31T11:44:23.640 に答える