Railsのパラメータは説明されましたか?


228

誰かparamsがRailsコントローラで説明できますか?それらはどこから来て、何を参照していますか?

  def create
    @vote = Vote.new(params[:vote])
    item = params[:vote][:item_id]
    uid = params[:vote][:user_id]
    @extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
    last_vote_time = @extant.created_at unless @extant.blank?
    curr_time = Time.now
  end

このコードを1行ずつ読み、何が起こっているのかを理解できるようにしたいと思います。


2
サーバー側のウェブ開発の背景を教えてください。あなたはすでにどんなテクノロジーを知っていますか?
マウリシオリニャレス2011

3
私は何年もHTMLとCSSに携わってきました。PHP、JS、Javaを使用した取得クラス。PHPでMVCをほとんど使用していません。私は本当にJavaを使ったプログラミングを学びました。そして私はデータベース理論を完全に理解しています。
2011

回答:


281

パラメータは、ユーザーがページをリクエストしたときにユーザーのブラウザから取得されます。最も一般的なHTTP GETリクエストの場合、パラメーターはURLにエンコードされます。たとえば、ユーザーのブラウザが要求した場合

http://www.example.com/?foo=1&boo=octopus

次にparams[:foo]「1」params[:boo]となり、「タコ」となります。

HTTP / HTMLでは、paramsは実際には一連のキーと値のペアであり、キーと値は文字列ですが、Ruby on Railsには、paramsをハッシュ付きのハッシュにする特別な構文があります。たとえば、ユーザーのブラウザが要求した場合

http://www.example.com/?vote[item_id]=1&vote[user_id]=2

次にparams[:vote]、ハッシュ、params[:vote][:item_id]「1」、params[:vote][:user_id]「2」になります。

Ruby on Railsのパラメータは、PHPの$ _REQUEST配列に相当します


13
$ _REQUESTと同等ですが、$ _ REQUESTにはget、post、cookieデータが含まれますが、paramsはgetおよびpostデータのみを含みます。
Parziphal 2013年

3
@renocor POSTデータもRails paramsハッシュに含まれます。Cookieデータはsessionハッシュに含まれます。
Richard Jones

この回答では、パラメーターのもう1つのソースであるURLを省略しています。詳細については、hammarの回答を参照してください。
Richard Jones

1
トアスタロビン、私の答えの2番目の文を読んでいないか、最初の例を見ていないようです。
David Grayson

1
@AnkitDhingra ... HTTP paramsは実際にはキーと値のペアのみであり、Rails(おそらくRack gem)はそれをキー値に従ってハッシュと配列に解析するため、常に文字列になると思いますが、何もソートされていませんこれは、値が数値であることをRailsに伝えます。
rubyprince 2014年

75

他の人が指摘したように、params値はGETリクエストのクエリ文字列またはPOSTリクエストのフォームデータから取得できますが、3番目の場所から取得することもできます。URLのパス。

ご存知かもしれませんが、Railsはルートと呼ばれるものを使用して、対応するコントローラーアクションにリクエストを送信します。これらのルートには、URLから抽出されてに入れられるセグメントが含まれる場合がありますparams。たとえば、次のようなルートがあるとします。

match 'products/:id', ...

次に、のようなURLへのリクエストhttp://example.com/products/42はに設定さparams[:id]42ます。


どのようにして2番目のパラメーターを取得しますか?/ squad / id / member / id / stuffのように
weteamsteve

48

Paramsには、次の3つのグループのパラメータが含まれています。

  1. ユーザー提供のパラメーター
    • GET http://domain.com/url?param1=value1¶m2=value2はparams [:param1]およびparams [:param2]を設定します)
    • POST (例:JSON、XMLは自動的に解析され、パラメーターに格納されます)
    • 注:デフォルトでは、Railsはユーザーが指定したパラメーターを複製し、それらをparams [:user]に格納します(UsersControllerの場合)。wrap_parameters設定で変更できます。
  2. ルーティングパラメータ
    • match '/user/:id' routes.rbでparams [:id]が設定されます
  3. デフォルトのパラメーター
    • params[:controller]そしてparams[:action]、常に利用可能であり、現在のコントローラとアクションが含まれています

1
User supplied parametersもう少し下でノートを広げてくれませんか?たとえば、UsersControllerのparamsハッシュの例が役立ちます。あなたの例では、ハッシュは次のようになり{first_name: "mike", user: {first_name: "mike"} ...} ます。それは正しいですか?
2013

1
rails4にはそれはありません。例えば、{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"}。私が間違っていても許してください。私はRailsの初心者です。あなたのメモによると、私は見るべきです:{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"} それがrails4の強力なパラメータと関係があるかどうかはわかりません。
2013

2
Rails 4で重複したパラメーターが表示されていますが、Rails独自のHTML投稿ではなく、json POSTリクエスト(Angularjsを使用)でのみ表示されます。:このリンクは理由を説明stackoverflow.com/questions/10774972/...
ホーマン

13

基本的に、パラメーターはRailsアプリケーションへのユーザー指定のデータです。

フォームを投稿するときは、GETリクエストではなくPOSTリクエストを使用します。通常のRailsリクエストは、サイトを閲覧するときにGETリクエストと見なすことができます。

フォームを送信すると、コントロールがアプリケーションに返されます。フォームに送信した値をどのように取得しますか?params方法です。

コードについて。@vote = Vote.new params[:vote]params [:vote]のデータを使用して、データベースへの新しい投票を作成します。送信されたフォームユーザーの名前が:voteであるとすると、そのすべてのデータはハッシュの:voteフィールドにあります。

次の2行は、アイテムを取得するために使用され、uidユーザーがフォームに送信しました。

@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])

条件item_id = itemおよびuser_id = uidのデータベースから、最新または最後に挿入された投票を検索します。

次の行には、最後の投票時間と現在の時間がかかります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.