昨日の筋トレで全身が痛い。ので本日はランニングだけ。
流石に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つ取得した時点で処理を終了します。
コメント