オープンソースこねこね

Webプログラミングなどについてあれこれ。

RailsのControllerで使用するparamsは変数でなかった件

Railsの話。最近Rubyを少し触りはじめました。

で、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オブジェクトのパラメータを 戻す関数であることがわかるよ。