はじめに
Railsチュートリアルの学習記録です。
※前回の記録
第4章 Rails風味のRuby
まずはブランチを切り替え
git checkout -b rails-flavored-ruby
①ヘルパー
ヘルパーとは、ある動作を処理する場合にメソッド化して扱えるようにRailsにあらかじめ組み込まれた機能のこと。
application.html.erbの確認
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
stylesheet_link_tagRailsの組み込み関数ではapplication.cssをすべてのメディアタイプで使えるようにしている。
ここには少なくとも混乱を生じる可能性のあるRubyの概念が4つあります。Railsの組み込み関数、カッコを使わないメソッド呼び出し、シンボル、そしてハッシュです。
カスタムヘルパーの作成
app/helpers/application_helper.rbを編集
module ApplicationHelper def full_title(page_title = '') base_title = "Ruby on Rails Tutorial Sample App" if page_title.empty? base_title else page_title + " | " + base_title end end end
application.html.erbの編集
× <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title> ○ <title><%= full_title(yield(:title)) %></title>
②クラス継承
※4.4.2の内容
> rails c Loading development environment (Rails 5.1.7) irb(main):001:0> s = String.new("Test") => "Test" irb(main):002:0> s.length => 4 irb(main):003:0> s.class => String irb(main):004:0> s.class.superclass => Object irb(main):005:0> s.class.superclass.superclass => BasicObject irb(main):006:0> s.class.superclass.superclass.superclass => nil irb(main):007:0> n = Integer(1) => 1 irb(main):008:0> n.class => Integer irb(main):009:0> n.class.superclass => Numeric irb(main):010:0> n.class.superclass.superclass => Object irb(main):011:0> n.class.superclass.superclass.superclass => BasicObject irb(main):012:0> n.class.superclass.superclass.superclass.superclass => nil
🙄superclassメソッドを使うとすべてのクラスがObject(BasicObjectクラスを継承している)であることがわかります!
StaticPagesControllerもクラスであることを確認する。
> c = StaticPagesController.new => #<StaticPagesController:0x0000000008192c58 @_action_has_layout=true, @_routes=nil, @_request=nil, @_response=nil> irb(main):014:0> c.class => StaticPagesController irb(main):015:0> c.class.superclass => ApplicationController irb(main):016:0> c.class.superclass.superclass => ActionController::Base irb(main):017:0> c.class.superclass.superclass.superclass => ActionController::Metal irb(main):018:0> c.class.superclass.superclass.superclass.superclass => AbstractController::Base irb(main):019:0> c.class.superclass.superclass.superclass.superclass.superclass => Object irb(main):020:0> c.class.superclass.superclass.superclass.superclass.superclass.superclass => BasicObject irb(main):021:0> c.class.superclass.superclass.superclass.superclass.superclass.superclass.superclass => nil irb(main):022:0> c.home # アクションを呼ぶことも可能 => nil
🙄これはだいぶ面白いですね!!
※アクションを呼ぶとnilと返ってくることに関して。
実は、Railsは確かにRubyで書かれていますが、既にRubyとは別物なのです。Railsのクラスは、普通のRubyオブジェクトと同様に振る舞うものもありますが、多くのクラスにはRailsの魔法の粉が振りかけられています。Railsは独特であり、Rubyとは切り離して学習する必要があります。
③ユーザークラス作成
example_user.rbの作成
class User attr_accessor :name, :email def initialize(attributes = {}) @name = attributes[:name] @email = attributes[:email] end def formatted_email "#{@name}<#{@email}>" end end
attr_accessorで属性に対応するアクセサーを作成。
これにより、そのデータを取り出すメソッド(getter)と、データに代入するメソッド(setter)を定義してくれる。
→コントローラ内で宣言するだけでビューからアクセスできるインスタンス変数ができる。
コンソールで確認※再起動必要
> rails c Loading development environment (Rails 5.1.7) irb(main):001:0> require './example_user' => true irb(main):002:0> u = User.new => #<User:0x0000000008102b80 @name=nil, @email=nil> irb(main):003:0> u.name => nil irb(main):004:0> u.name = "sato" => "sato" irb(main):005:0> u.email = "sato@example.com" => "sato@example.com" irb(main):006:0> u.formatted_email => "sato<sato@example.com>"
削除
rm example_user.rb
プッシュ
$ git commit -am "Add a full_title helper" $ git checkout master $ git merge rails-flavored-ruby $ rails test $ git push $ git push heroku // 未実施
✅その他参考になった点
・後続if:trueのときのみ実行される式
puts "x is not empty" if !x.empty?
・Rubyではシンボルを多用する
おわりに
rails consoleの活用方法を深く学べたので良かった。
ここでいったんProgateなりでRubyについて復習してもよいかもしれない。
さくっとみてみたけど5章ではどうやらBootstrap、Sassなどライブラリを活用してフロント寄りの実装をしていくっぽいですね。
備忘録
6章~8章でログイン機能
9章でremember_me
10章でユーザーのCRUD
11章で送信メール
12章でパスワードの設定
13章で画像表示など
14章でフォロー機能
コメントを残す