SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

連載記事

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

翔泳社では、「独習」「徹底入門」「スラスラわかる」「絵で見てわかる」「一年生」などの人気シリーズをはじめ、言語や開発手法、最新技術を解説した書籍を多数手がけています。プロジェクトマネジメントやチームビルティングといった管理職向けの書籍も豊富です。

ITエンジニアとしてのスキルアップ・リスキリングに、ぜひお役立てください。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
japan.internet.com翻訳記事

Railsを使ってURLパラメータの引き渡しと読み込みを行う方法

RailsのURLパラメータの勘違いしやすいポイント

  • X ポスト
  • このエントリーをはてなブックマークに追加

 Ruby on Rails(RoR)は、URLパラメータの引き渡しと読み込みに関して言えば、非常に使いやすいフレームワークとして知られてきました。その一方で、URLパラメータは単純な文字列として渡されるという共通認識があります。本稿では、RoRがURLパラメータをどのように表現するか、そしてユーザーがこの情報をどのように利用してURLパラメータを効果的かつ効率的に解析し、使用できるかを説明します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 Ruby on Rails(RoR)は、URLパラメータの引き渡しと読み込みに関して言えば、非常に使いやすいフレームワークとして知られてきました。その一方で、URLパラメータは単純な文字列として渡されるという共通認識があります。本稿では、RoRがURLパラメータをどのように表現するか、そしてユーザーがこの情報をどのように利用してURLパラメータを効果的かつ効率的に解析し、使用できるかを説明します。

RailsとURLパラメータ

 まず、Railsでのパラメータの引き渡しについて、例を用いて説明します。リスト1に、ローカルマシン上の受信サーバーに送られる一連のパラメータを含んだURLを示します。

リスト1
http://localhost/users/create?user[first_name]=dhanabal&user[last_name]=arumugam&arr []=1&arr []=7&arr []=3&id=15

 Railsのユーザーであれば、usersはコントローラクラスUsersControllerを指し、createはUserControllerクラス内のメソッドであることがすぐに分かるでしょう。

 次の部分が、createメソッドのパラメータになります。

"user[first_name]=dhanabal&user[last_name]=arumugam&arr[]=1&arr []=7&arr []=3&id=15"

 通常、URLパラメータは、「name=tom&age=21」のように、単純な名前/値ペアとして送信されます。Railsの規則でも、パラメータは名前/値ペアとして送信されますが、若干の相違点があります。Railsでは、パラメータの引き渡しを簡素化し、モデルオブジェクトとモデル属性によってパラメータを修飾するという方法でオブジェクトリレーショナルマッピングを行います。上記の例では、userはモデル(テーブル)ユーザーにマッピングされ、first_nameはモデルクラス(テーブルユーザーのfirst_name列)のfirst_name属性にマッピングされます。

配列

 Railsでは、値の配列をパラメータとして送信することもできます。リスト1では、値arr []=1&arr []=7&arr []=3は配列を表します。配列の名前は「arr」で、値はそれぞれインデックス0、1、および2にあたります。

RailsパラメータとHashMap

 すべてのURLパラメータは、Rail内部ではHashMapとして表されます。これは、URLパラメータは単純な文字列以外では送信されないという一般的な考えに反しています(とは言え、Railsでは単純な文字列としてパラメータを読み込めないというわけではありません)。上記の例でHashMapとしてパラメータを内部的にマッピングした様子を、図1に示します。

図1
図1

 図1を見ると一目瞭然ですが、Railsでは、主なURLパラメータを、キーと値を含む単純なHashMapにマッピングしています。引き渡される idパラメータについては、値15が、値セクションに直接保持されます。ただし、userのような複雑なパラメータの場合は、値フィールドにはHashMapのアドレスが保持され、実際の値もここに置かれます。配列arrも、userパラメータと同様に処理されます。

RailsコードとパラメータのHashMap

 URLパラメータの内容と、RailsがこのURLパラメータをどのように構造化しているかを分析してみると、パラメータを簡単に渡す方法が見えてきます。例えばリスト2のようなコードが考えられます。

リスト2
 1 params.each {|key,value|
 2    puts "key=>#{key}"
 3    if value.class.to_s != "String"
 4       value.each {|k,v|
 5       puts "Hash inner key=>#{k}"
 6       puts "Hash inner value=>#{v}"
 7
 8    elseif value.class.to_s != "array"
 9       puts "Hash inner key=>#{key}"
10       puts "Hash inner value=>#{value}"
11    else
12       puts "single Hash=>#{value}"
13    end

 リスト2の例では、行1でURLパラメータが実際に解析されます。Railsでは、URLパラメータはデフォルトオブジェクトparamsに保存されています。paramsはハッシュデータ構造を備えています。keyがシンプルな値の場合は、行12で示すように出力されます。今回の例では、keyフィールドには、それぞれuser、id、およびarrが保持される可能性があります。パラメータのタイプが配列である場合(つまりarrパラメータの場合)も、同様に値が出力されます。しかし、userのような複雑なタイプの場合は、値はさらに解析され、サブキーとそれぞれの値が抽出されます。userの場合、これ以降の繰り返しにおいて、サブキー「k」が値 first_nameおよびlast_nameをそれぞれ保持します。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
RailsパラメータとNet::Http

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Raveendran V(Raveendran V)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Dhanabal Arumugam(Dhanabal Arumugam)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Gururaj B Rao(Gururaj B Rao)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Raghavendra Sesandra Nanjundappa(Raghavendra Sesandra Nanjundappa)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3686 2009/04/06 14:00
" ); }

おすすめ

アクセスランキング

  1. 1
    プロジェクトマネージャーなら知っておきたい、心理的安全性を生み出すチーム盛り上げプロデュース術
  2. 2
    Google、同社史上もっともインテリジェントなAIモデル「Gemini 2.5」を発表
  3. 3
    Eclipseに対応したCopilot「Code completion in GitHub Copilot for Eclipse」正式版がリリース
  4. 4
    「アップサート」 ~マンガでプログラミング用語解説
  5. 5
    Microsoft Security CopilotにAIエージェント機能が追加、セキュリティ保護を強化
  1. 6
    日本マイクロソフト、政府機関や国内の基幹インフラ事業者などに「CyberSmart AI プログラム」の提供を開始
  2. 7
    マイクロソフト、コンパイラとツールの移植でTypeScriptを10倍の処理速度へ
  3. 8
    Rust製の高速コードエディタ「Zed」、Gitを統合
  4. 9
    なりたくなかったマネージャーが天職に? 知らない景色に飛び込むエンジニアは「何にだってなれる」
  5. 10
    Flutter案件の平均年収は831万円、フルリモート案件が79%超で週3日以下の案件が47%超に達する

アクセスランキング

  1. 1
    プロジェクトマネージャーなら知っておきたい、心理的安全性を生み出すチーム盛り上げプロデュース術
  2. 2
    Google、同社史上もっともインテリジェントなAIモデル「Gemini 2.5」を発表
  3. 3
    Eclipseに対応したCopilot「Code completion in GitHub Copilot for Eclipse」正式版がリリース
  4. 4
    「アップサート」 ~マンガでプログラミング用語解説
  5. 5
    Microsoft Security CopilotにAIエージェント機能が追加、セキュリティ保護を強化
  6. 6
    日本マイクロソフト、政府機関や国内の基幹インフラ事業者などに「CyberSmart AI プログラム」の提供を開始
  7. 7
    マイクロソフト、コンパイラとツールの移植でTypeScriptを10倍の処理速度へ
  8. 8
    Rust製の高速コードエディタ「Zed」、Gitを統合
  9. 9
    なりたくなかったマネージャーが天職に? 知らない景色に飛び込むエンジニアは「何にだってなれる」
  10. 10
    Flutter案件の平均年収は831万円、フルリモート案件が79%超で週3日以下の案件が47%超に達する
  1. 1
    世界6000万ユーザーの「TimeTree」、サービスの未来を見据えて挑んだデータベース移行の舞台裏
  2. 2
    「オブザーバー・パターン」 ~マンガでプログラミング用語解説
  3. 3
    3/5まで書籍全文が無料公開 『Pythonで動かして学ぶ!Kaggleデータ分析入門』
  4. 4
    データサイエンス基礎を高校数学から復習しよう! D3.jsでデータを表現する
  5. 5
    macOS上のアプリケーションからChatGPTが呼び出せるように。各種IDEやターミナル、メモなどが対応
  6. 6
    GitHub、あらゆるエディタやIDEとGitHub Copilotとの統合を可能にする「Copilot Language Server SDK」を一般公開
  7. 7
    「アップサート」 ~マンガでプログラミング用語解説
  8. 8
    フロントエンドの定番ライブラリ「React 19」の新機能を紹介──React Server Componentsとその他の改善点
  9. 9
    「Tailwind CSS」の公式UIライブラリ「Tailwind UI」、サービス拡大を視野に「Tailwind Plus」へ名称変更
  10. 10
    オープンソーステキストエディタ「Emacs 30.1」リリース

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

メールバックナンバー

アクセスランキング

  1. 1
    プロジェクトマネージャーなら知っておきたい、心理的安全性を生み出すチーム盛り上げプロデュース術
  2. 2
    Google、同社史上もっともインテリジェントなAIモデル「Gemini 2.5」を発表
  3. 3
    Eclipseに対応したCopilot「Code completion in GitHub Copilot for Eclipse」正式版がリリース
  4. 4
    「アップサート」 ~マンガでプログラミング用語解説
  5. 5
    Microsoft Security CopilotにAIエージェント機能が追加、セキュリティ保護を強化
  1. 6
    日本マイクロソフト、政府機関や国内の基幹インフラ事業者などに「CyberSmart AI プログラム」の提供を開始
  2. 7
    マイクロソフト、コンパイラとツールの移植でTypeScriptを10倍の処理速度へ
  3. 8
    Rust製の高速コードエディタ「Zed」、Gitを統合
  4. 9
    なりたくなかったマネージャーが天職に? 知らない景色に飛び込むエンジニアは「何にだってなれる」
  5. 10
    Flutter案件の平均年収は831万円、フルリモート案件が79%超で週3日以下の案件が47%超に達する

アクセスランキング

  1. 1
    プロジェクトマネージャーなら知っておきたい、心理的安全性を生み出すチーム盛り上げプロデュース術
  2. 2
    Google、同社史上もっともインテリジェントなAIモデル「Gemini 2.5」を発表
  3. 3
    Eclipseに対応したCopilot「Code completion in GitHub Copilot for Eclipse」正式版がリリース
  4. 4
    「アップサート」 ~マンガでプログラミング用語解説
  5. 5
    Microsoft Security CopilotにAIエージェント機能が追加、セキュリティ保護を強化
  6. 6
    日本マイクロソフト、政府機関や国内の基幹インフラ事業者などに「CyberSmart AI プログラム」の提供を開始
  7. 7
    マイクロソフト、コンパイラとツールの移植でTypeScriptを10倍の処理速度へ
  8. 8
    Rust製の高速コードエディタ「Zed」、Gitを統合
  9. 9
    なりたくなかったマネージャーが天職に? 知らない景色に飛び込むエンジニアは「何にだってなれる」
  10. 10
    Flutter案件の平均年収は831万円、フルリモート案件が79%超で週3日以下の案件が47%超に達する
  1. 1
    世界6000万ユーザーの「TimeTree」、サービスの未来を見据えて挑んだデータベース移行の舞台裏
  2. 2
    「オブザーバー・パターン」 ~マンガでプログラミング用語解説
  3. 3
    3/5まで書籍全文が無料公開 『Pythonで動かして学ぶ!Kaggleデータ分析入門』
  4. 4
    データサイエンス基礎を高校数学から復習しよう! D3.jsでデータを表現する
  5. 5
    macOS上のアプリケーションからChatGPTが呼び出せるように。各種IDEやターミナル、メモなどが対応
  6. 6
    GitHub、あらゆるエディタやIDEとGitHub Copilotとの統合を可能にする「Copilot Language Server SDK」を一般公開
  7. 7
    「アップサート」 ~マンガでプログラミング用語解説
  8. 8
    フロントエンドの定番ライブラリ「React 19」の新機能を紹介──React Server Componentsとその他の改善点
  9. 9
    「Tailwind CSS」の公式UIライブラリ「Tailwind UI」、サービス拡大を視野に「Tailwind Plus」へ名称変更
  10. 10
    オープンソーステキストエディタ「Emacs 30.1」リリース