TECH EXPERT 5日目

TECH::EXPERT

昨日の筋トレで全身が痛い。ので本日はランニングだけ。
流石に12時間×5日目となってくると疲れてきます。30分ほど寝坊しました。

ひとまず知識を流し込む段階が終わりつつあり(吸収しなければいけない情報量は増えてますが総論ではなくて各論なので受け流す感じ)、コードを書く割合が増えてます。TECHのカリキュラム通りに作ってれば楽ではあるんですが、自分ならこうするなぁとかやってるとカリキュラムが進まない。昔からそうなんですが、他人の解答をみてそれに合わせるのが苦手なんです。一応理解はするんですけど、自分の脳内Mapingと違うのでoutputしにくいし、間違える。やっぱり一度は自分のやり方で解決しないと理解したとは言えない気がする。

やったことメモ

アソシエーション

モデルクラスにhas_manyやbelongs_toなどの定義する。

class Hogehoge < ApplicationRecord
  belongs_to :user
end
class User < ApplicationRecord
  has_many :hogehoges
end

このように定義するとuserに所属するhogehogeが簡単に呼び出せる。

アソシエーションなし。
user = User.find(1)
Hogehoge.where(user_id: user.id)

アソシエーションあり。
user = User.find(1)
user.hogehoges

Userのインスタンスから所属するhogehogeを引くことができる。
逆も然りで、HogehogeのインスタンスからUserを引くこともできる。
hogehoge.userでユーザーのインスタンスを取得できる。

railsの命名規則

controller → 複数形
- ファイル名:users_controller.rb
- class名:UsersController

model → 単数形
- ファイル名:user.rb
- class名:User

データベース → 複数形
- table名:users

view → 複数形
- ディレクトリ名:users/

テーブルからカラムを削除する。

migrationファイルを作成

rails g migration Removeカラム名From削除元テーブル名 削除するカラム名:型

rakeする

rake db:migrate

whereメソッド

ActiveRecordメソッドの一部。
モデル.where(条件)のように引数部分に条件を指定することで、テーブル内の条件に一致したレコードのインスタンスを配列型で取得できる。

destroyメソッド

ActiveRecordメソッドのうちの一つ.
インスタンスに対してそのレコードを削除する際に使うことができる。

updateメソッド

updateはActiveRecordメソッドのうちの一つです。updateメソッドはモデルのインスタンスに対して使用することで、引数内の情報にレコードを更新することができます。

update(カラム名: 更新する情報, カラム名2: 更新する情報2、、、)

resourcesメソッド

Railsの基本となるコントローラの7つのアクションで記載した7つのアクション名に対してのルーティングを自動で生成するメソッドです。

renderメソッド

renderメソッドは、部分テンプレートを呼び出す際に利用するメソッドです。

render partialオプション

renderメソッドに :partialというオプションをつけることで、明示的に部分テンプレート名を指定し、部分テンプレートを表示することができます。
下の例では、_sample.html.erbという部分テンプレートを呼び出しています。

render localsオプション

また、localsというオプションを用いると部分テンプレート内でその変数を使えるようになります。

render partial: "sample", locals: { hogehoge: "hello!" }

変換

  • downcaseで大文字を小文字に変換
  • upcaseで小文字を大文字に変換
  • swapcaseで小文字⇔大文字の変換
  • capitalizeで先頭の小文字を大文字に変換

split()で文字を分割。
引数を文字で指定すればその文字で分割。無指定なら半角スペースで分割。

GitHub

git clone リポジトリURL ディレクトリ名

bundle execコマンド

bundle exec は2つ以上のrailsアプリケーションを同じバージョンのRubyを利用して作成している際に必要となるコマンドです。

rakeコマンドやrailsコマンドなどはそれぞれrake、railsというgemによって使うことができるが、開発しているプロジェクトが2つ以上ある場合に「rake db:migrate」などのコマンドを打ち込んでしまうと下の画像のようなエラーが起きることがあります。

Mechanize

簡単にスクレイピングするためのgem
Mechanizeのインスタンスを作成し、.getメソッドでURLを文字列として渡す。
.serchメソッドでhtmlの要素を検索できる。なお取り出した要素は1つであっても配列で保存される。(クラス要素の指定は.class名で行う)

agent = Mechanize.new
page = agent.get("http://review-movie.herokuapp.com/")
elements = page.search('h2 a') # h2要素の下のa要素を検索
puts elements[0]

inner_textメソッド

searchメソッドで得られたHTML情報のテキストを取得したい場合、inner_textメソッドを使います。

elements.each do |ele|
  puts ele.inner_text
end

get_attributeメソッド

aタグ要素の属性herfのようなURLだけ取得したい場合、get_attributeメソッドを使う。
get_attribute(属性)で指定した属性の値を取得する。
.get_attribute(属性)は[:属性]と簡略化できる。

elements.each do |ele|
  puts ele.get_attribute('href') # puts ele[:href]としても良い
end

atメソッド

atメソッドはsearchメソッドと同じように用います。
違いはatの場合は一致する値を1つ取得した時点で処理を終了します。

コメント