ダッシュで奪取

元SIerだけどWebエンジニアになりたい!

【雑記】TECH::EXPERT 5日目

5日目です!今日は9時〜19時半まで教室にいました。

目次

  1. 今日やったこと
  2. メモ
  3. 参考URL
  4. 今日の日記
  5. 明日やりたいこと

1. 今日やったこと

  • カリキュラム
    • Rails エラー問題
    • 映画レビューサイト作成

2. メモ

  • Mechanize
    • スクレイピングを行うことができるGem
    • Gemを入れるとMechanizeクラスが使えるようになる
# 使う前にインスタンス作る
test = Machanize.new

# 指定したURLのインスタンス作る
page = test.get("http://〜url")

# ↑のURLから、h1要素を取り出す
elements = page.search('h1')

# ↑↑のURLから、h2の中のa要素を取り出す
elements = page.search('h1 a')

# 配列になっているので、1個ずつ取り出せる!
elements[0]
elements[1]

# ↑だとHTML部分まで持ってきてしまうので、テキストだけ欲しいときは
elements[0].inner_text

# テキストではなく、属性部分だけ欲しいときは
elements[0].get_attribute('href') # a href="★" / ★の部分が取れる
elements[0][:href] # これでも上と同じ

# ↑だと複数取得できるが、一番上の1件だけで良いときは
element = page.at('h1') # searchメソッドの1件版
  • first_or_initialize
    • whereで検索した条件と同じレコードがなければ、新しくインスタンスを作る
# nameが田中のレコードが取得できなかったら生成する
# → 取得できたら、nameが田中のレコードをそのまま取得する
user = User.where(name: "田中").first_or_initialize
  • order
    • 取得順を指定する
# id 降順でユーザーを取得
User.order('id DESC')
  • limit
    • 取得件数を指定する
# ユーザーを5件取得
User.limit(5)
  • LIKE
    • あいまい検索、whereと一緒に使う
# nameがt〜のユーザーを取得
User.where('name LIKE(?)', "t%")
  • form_for
# form_for(モデル名) do |f|
# 〜
# end
<%= form_for(@user) do |f| %>
  < f.text_field :name, placeholder: "なまえ" %>
  <f.submit "送信" %>
<% end %>

# ルーティングがネストしている時は、配列で書く
# user/1/comment
<%= form_for[@user, @comment] do |f| %>
<% end %>
  • モデルがあるときはform_for 投稿フォーム等
  • データをアクションに送りたいだけの時はform_tag 検索フォーム等

  • form_forで送られたデータは、requireで取得できる

<%= form_for(@user) do |f| %>
  < f.text_field :name,        placeholder: "なまえ" %>
  < f.text_field :nickname, placeholder: "あだな" %>
  <f.submit "送信" %>
<% end %>

# require(:user)で、:nameと:nicknameが取れる
name = params.require(:user).permit(:name, :nickname)
  • merge
    • ハッシュを結合できる
hash1 = { name: "吉沢" }
hash2 = { nickname: "よっしー" }

hash1.merge(hash2)
# { :name => "吉沢", :nickname => "よっしー" }
  • average
    • 小数点ありの状態で、平均値を取得する
# ユーザーの平均年齢
users = User.all
users.average(:age)
  • round
    • 小数点以下を四捨五入する
11.1.round
# 11
  • before_action
    • 指定のコントローラ全てのアクションの前に、共通処理を行う
# index, showの前にhogeが行われる
before_action :hoge

def index
end

def show
end

def hoge
end
  • group
    • group_by的なことができる
# モデル.group(:カラム名)
# group_by user_id
Tweet.group(:user_id)
  • group レコード数が多い順に取得
# order('count_カラム名') で、レコード数でソートできる
# レシピごとで、コメント数の多い順に表示
Comment.group(:recipi_id).order('count_recipi_id DESC').count(:recipi_id)
  • keys
    • ハッシュのキーだけを取り出す
{ "japanese" => 100, "english" => 80 }.keys
# => ["japanese", "english"]
  • map
    • 配列の中身を1つずつ取り出して、配列の中身を使って個別に処理を行う
    • 処理を行った配列の中身で、新しい配列を作る
# 配列.map {|変数| 変数に行う処理 }
fruits = [ "りんご", "みかん", "ぶどう" ]
# => ["りんご", "みかん", "ぶどう"]
fruits.map {|fruit| fruit + "ジュース" }
# => ["りんごジュース", "みかんジュース", "ぶどうジュース"]

3. 参考URL

4. 今日の日記

先に作ったついったーもどきは、正直何やっているのか理解しないまま進めていたのですが、次の課題に入ってなんとなく(本当になんとなく)分かってきた気がする…ような…しないような…

適当に書いてエラー画面出す前に、とりあえずコンソールで細かく確認してみることが大事だなぁと思いました。

5. 明日やりたいこと

  • カリキュラム
    • 映画レビューサイト作成 終わらせたい!