0

Railsでは、コントローラーのcreateメソッドはデフォルトで異なる値のHTTPリクエストを受信します。デフォルトでは、新しいレコードは次のように作成されます。

@apo = Apo.new(params[:apo])

しかし、どうすればこのparamsハッシュから単一の値にアクセスできますか?

次のようなものを作成したいと思います。

@apo = Apo.new do |a|
        a.name = $someVariable
        a.value = $anotherVariable
        a.quantity = -> here i want to have one value which is in params[:apo]
        end

私が探しているものを理解していますか?何百万もの可能性を試しましたが、うまくいきません。

または、ビューに2番目のparamsハッシュを作成して、この1つの値のみを保存することは可能ですか?

PS私はこれを行うためにJavaScriptを使用したくない...

どうもありがとう!

4

1 に答える 1

2

paramsは特別であり、HTTPリクエストごとにRailsによって設定されます。それは形式のハッシュです

{ :object => { :attrib1 => "value1", :attrib2 => "value2" ... }}

したがって、オブジェクト全体を次のように参照できます。

params[:foo]

およびのような個々の属性(フィールド)

params[:foo][:bar]

ActiveRecordモデルは、最初の例のように、値のハッシュを渡すことで1回の呼び出しで作成できます。ただし、インスタンスを作成する方法は他にもたくさんあります。あなたはできる

def make_apo(some_value, another_value)
  apo = Apo.new
  apo.name = some_value
  apo.value = another_value
end

このようなメソッドは、Apoのインスタンスを返します。あなたの場合、にいくつかの値がある場合はparams、上記を変更して別の引数として受け入れるparamsか、呼び出すときに特定の値を渡します。

def make_apo(some_value, another_value, quantity, passed_params)
  apo = Apo.new
  apo.name = some_value
  apo.value = another_value
  apo.quantity = passed_params[:apo][:quantity]
end

しかし、これはすべて非常に珍しい方法です。したがって、これを行うだけでなく、これを行うことを提案するよりも、何が起こっているのかを説明するためのものです。

于 2012-12-06T21:41:34.447 に答える