RailsのControllerで使用するparamsは変数でなかった件
で、RailsのControllerでリクエストパラメータを取得するのに利用するparamsというHashパラメータがあるのですけど、 メソッドの引数定義はないし、@がついてないのでインスタンス変数でもない。どこで定義されてるのよっこの変数は、と思ってたんですが、StackOverflowに同じ疑問をもつヒトの質問と回答がありましたので以下にリンクと和訳を。
なるほど。メソッドだったのねん。
Rails: "params" はどこで定義されている?
私はparamsを自分のコントローラでこんなふうに使っている。
class ProductsController < ApplicationController
def create
@product = Product.new(params[:aircon])
...
end
end
paramsはApplicationControllerのアトリビュートなのか? @のプリフィクスがついてないので違うと思う。 それで、paramsは実際のところなんなの? ProductsController内のカスタムメソッドでも使えるの?
回答
これはActionController::Metalで定義されている。 ApplicationControllerはActionController::Metal を継承しているActionController::Baseを継承している。 Rails API (http://api.rubyonrails.org/) を見ればparamsがrequestオブジェクトのパラメータを 戻す関数であることがわかるよ。