【Ruby】配列とハッシュ、それぞれの値の取り出し方
配列とハッシュが混在しているとき値の取り出し方が混乱したのでまとめました。
<配列>
<ハッシュ>
<配列のなかにハッシュ>
【Rails】ターミナルで「rails routes」を使うタイミング
ターミナルのrails routesで読み方迷子にならないようメモ。間違いがあればご指摘してくださると嬉しいです。
rails routesを記述したとき
こんな表示がでますね。そもそもどんなときにrails routesって使うっけー??という疑問に答えがすっとでてこなかったので、このままでは使いこなせないと思い記事にすることにしました。
Railsガイドによると、「現在のアプリケーションで利用可能なルーティングを表示する(既存のルールを一覧表示にする)」ときに使うようです。https://railsguides.jp/routing.html
そもそもルーティングとは「HTTPリクエストを受け取ったときに、そのリクエストを適切なコントローラーとその中のアクションに割り振る」でした。なので、HTTPリクエスト(HTTPメソッド・URLパターン)とコントローラーとアクションの対応関係の一覧ということです。
なのでプログラムを記述する際に、「あれ、フォームに記載した情報を投稿するリンク貼りたいけどここには何のURLパターンを記述すればいいっけ?」などとなったときにターミナルでrails routesを実行したら答えを教えてくれます。特にresourcesメソッドでルーティングを生成すると詳しくルーティングを記述せずに済んでしまうので、このときrails routesで確認するとよさそうですね。
・Verb:HTTPリクエストで送られてくるHTTPメソッド
・URL Pattern:HTTPリクエストで送られてくるURLパターン(Prefixと一対一対応)
・Controller#Action:振り分けられるコントローラーとその中のアクション
少しずつ使いこなしたいものです。それでは今日はこのあたりで。
【Rails/命名規則】超基本メモ
「命名規則ってただの慣例?守らないと不都合ある?」ってことでRailsガイドを参考にして自分用にまとめました。
<コントローラーの命名規則> https://railsguides.jp/action_controller_overview.html
・基本的に複数形にする
・ただし絶対守らないといけないわけではない
・複数形のメリット:
resoursesなどのデフォルトのルーティングジェネレータがそのまま利用できる。
名前付きルーティングヘルパーの用法がアプリケーション全体で一貫する。
<モデルの命名規則> https://railsguides.jp/active_record_basics.html
・モデルは単数形(クラスは先頭が大文字)、対応するDBのテーブルは複数形。
・Railsでは、データベースのテーブル名を探索するときに、モデルのクラス名を複数形にした名前で探索するから
<ビューの命名規則> https://railsguides.jp/action_view_overview.html
・アプリケーションのapp/viewsディレクトリには、1つのコントローラごとに1つのディレクトリが作成される。
・例(※この部分は自作):「app/controllers/tweets_controller.rb」ファイルに対するビューディレクトリは「app/views/tweets」ディレクトリ。このなかに対応するコントローラのアクションに応じてビューファイル(index.html.erbなど)を作成する。→ でもビューファイルはrails g controller コントローラー名でコントローラー作成したときに自動でビューファイルで作成されるからあまり悩まないか。
命名規則はもっとありそうですが、今回はこのくらいで。。。
その他参考記事
http://www.code-magagine.com/?p=8682
http://www.code-magagine.com/?p=8682
https://techacademy.jp/magazine/22331
「インスタンス変数.カラム名」で目的のカラムのデータを取り出せる理由(Ruby on Rails)
こんばんは。Ruby on Railsの勉強中にわいた疑問です。
DBのカラム名textのデータを表示させるため、モデルに「@tweet = Tweet.find(params[:id])」、ビューファイルで「@tweet.text」の記述しただけで目当てのデータが取り出せたことに対して「え?.textって何?メソッド?カラム名?」となったため調べました。
いざ調べてみると、やはり同じ疑問を持つ方はいました。
https://qiita.com/yamayu_504/items/ad6ebe21226686391c47
こちらも参考になります。
https://qiita.com/Asama334/items/6fb79e4890a5118d8dee
一言でいうと「Ruby on Railsではカラムのデータを取り出すための、カラム名と同じ名前のメソッドが自動で作られている」らしい。それがこの場合でいう.textか。
具体的にいうと
① @tweet = Tweet.find(params[:id])に対応する、各カラムのインスタンス変数(例えば@text= textカラムの値 )が自動で生成。
② 「def text @text end」というtextメソッドが自動で定義。
③ そのtextメソッドを使って(@tweet.text)、インスタンス変数@tweetからtextカラムの値をよびだす。
Ruby on Railsで①②が自動に実行されるのは、ActiveRecordの機能(ActiveRecord::Base)のようです。@tweet.textの背景にこんなことが隠れているとは。。。!
理解しきれていないと思いますが、今日も勉強になりました🐥🐥🐥
変数の整理(Ruby)
変数が入り混じったときよく混乱します。
よく私が悩むポイントは
・どの範囲まで有効か(スコープ)
・どうやって見分けるか
なので、上記を意識して整理しました。
プロジェクト内どこでも有効。
先頭に$をつける。
あまり使われない
●インスタンス変数
宣言されたクラス内ならどのメソッドでも有効。
インスタンスごとに値は異なる。
先頭に@をつける
●ローカル変数
宣言されたメソッド内やブロック内でのみ有効。
定義のとき先頭に何もつける必要はない
→「普段何気なくみているただの(?)変数はローカル変数」ということを改めて認識!ちなみに有効範囲(スコープ)でについては「有効範囲の外で同じ名前の変数がでてきても、別の変数として認識される」という説明がいちばんしっくりきました。
例その①
name = "Tanaka"
def sample
puts name ←ローカル変数nameの有効範囲内。同じ変数nameとして認識。
end
sample
→ Tanaka と表示
例その②
def sample
puts name
end
name = "Tanaka" ← ローカル変数nameの有効範囲外。異なる変数として認識。
sample
→ エラー
ローカル変数の例をだしましたが、私は今Ruby on Railsの勉強中で、インスタンス変数(@~)もよくでてきます。インスタンス変数は同じクラス内なら異なるメソッドでも同じ変数として認識されることを考えると、index,new, editなどのアクション(同じアクションのコントローラーとビューで同じ変数を扱う)でインスタンス変数が使われている理由がわかりました。
以上です。書いてみると当たり前のこと書いてしまったかも。。。でも勉強になったのでこれからもアウトプット少しずつ頑張ります😁
Rubyにおけるメソッド(分類とか書き方とかの整理)
かなり混乱してきたので調べて整理しました。誤りがあればご指摘お願いします。
●メソッドとは●
オブジェクト指向における「操作」を定義したもの
Rubyでは全ての操作がメソッドとして実装されている
メソッドの実行の流れ
オブジェクトにメッセージを送る → オブジェクトがメッセージを受け取る
そのためメソッドにおけるオブジェクトはレシーバーとも呼ばれる。
●メソッドの分類● ← レシーバーで分類
・インスタンスメソッド
・クラスメソッド
・関数的メソッド
<インスタンスメソッド>
メソッドのレシーバーがインスタンスのとき。いちばんよく見る。
<クラスメソッド>
メソッドのレシーバーがクラスであるとき。
インスタンスを生成するメソッド(クラス名.new)など。
RailsのActiveRecordメソッドも
<関数的メソッド>
レシーバーがない(本当はあるが記述しない)メソッド。putsとか。
●書き方(定義と呼び出し)●
インスタンスメソッドとクラスメソッドについて
〜だめな例〜
class Calculation
def addition(a, b, c) ←これはインスタンスメソッド
puts a + b + c
end
end
addition(1,2,3) ← メソッドを呼び出すときはメソッド名だけ書いても✗
〜正しい書き方①:クラスメソッドとして〜
class Calculation
def self.addition(a, b, c) ← self.メソッド名(仮引数)
puts a + b + c
end
end
Calculation.addition(1,2,3) ← クラス名.メソッド名(実引数)で呼び出し
〜正しい書き方②:インスタンスメソッドとして〜
class Calculation
def addition(a, b, c) ← メソッド名(仮引数)
puts a + b + c
end
end
calculation = Calculation.new ← まずインスタンスを生成
calculation.addition(1,2,3) ← インスタンス名.メソッド名(実引数)で呼び出し
定義や分類については「たのしいRuby 第6版」を参考にしました。
少しすっきり〜!
ライブラリ関連ざっくりメモ(Ruby)
ほぼ自分用の超ざっくりメモです。
厳密には正しくないかもしれませんが、イメージで。。。
明らかに間違っていたら指摘お願いします。
●ライブラリ
プログラムを作るための部品をいっぱい集めたファイル
●Gem
Rubyで使われるライブラリ
Rubyのライブラリ(つまりGem)を管理するシステム
●Gemfile
Ruby on Railsアプリケーション内にあるファイルで、アプリケーションで使用するGemの情報(名前、バージョン)を記載する。
●Gemfile.lock
Ruby on Railsアプリケーション内にあるファイルで、Gemfileで設定したGemと依存関係にあるGemの情報について設定している。(bundlerによってGemをインストールすると自動的に記載されるので自分で記載する必要なし)
●bundler
Gemのひとつで、GemfileやGemfile.lockに従って、Gemを管理する。
依存関係にあるgemのインストールやgemのバージョン管理ができる。