RubyMine で Rails Tutorial 7章

  •  
  •  
  •  

7章

RubyMine で開きたいファイルを探すときは、shift を2回押すのが便利です。
ファイルに限らず、だいたいのものは探せます。

debug は RubyMine にもあるのですが、まだ使い方がよくわかっていません。
チュートリアルにあるように、byebug を使って debugger を埋め込むやり方のほうが手軽のようです。

new.html.erb を動かしたときに、フォームが真ん中に来ませんでした。

Bootstrap 4 のマニュアル を見ますと、offset-md-3 となっています。そのように修正します。

<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>

<div class="row">
  <div class="col-md-6 offset-md-3">
    <%= form_for(@user) do |f| %>
      <%= f.label :name %>
      <%= f.text_field :name %>

      <%= f.label :email %>
      <%= f.email_field :email %>

      <%= f.label :password %>
      <%= f.password_field :password %>

      <%= f.label :password_confirmation, "Confirmation" %>
      <%= f.password_field :password_confirmation %>

      <%= f.submit "Create my account", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

今度は真ん中に来ましたね。

Bootstrap のグリッドシステムでは、ブラウザの幅に応じてレイアウトを変えてくれるようになっています。
ここでは md だけ指定していますが、同時に複数の種類の class を指定することもできます。

col-md-6 offset-md-3 というのは、全体の 12 分割をどう使うかという指定です。
幅が6つ分の要素を作って、左に3つ開けるということで真ん中にくるようにしています。

エラー画面を作るところでは、.has-error がないと怒られました。

これも Bootstrap のマニュアルを見ると、:invalid に置き換わったようですね。そのように修正します。
. でなくて : で始まるクラス名になっているのは要注意です。

.field_with_errors {
  @extend :invalid;
  .form-control {
    color: $state-danger-text;
  }
}

リスト 7.25 のテストを直すところは、こんな感じにしておきました。
_error_messages.html.erb に対応して、エラーとなったときに出てくるということです。

require 'test_helper'

class UsersSignupTest < ActionDispatch::IntegrationTest
  test "invalid signup information" do
    get signup_path
    assert_no_difference 'User.count' do
      post users_path, params: { user: { name:  "",
                                         email: "user@invalid",
                                         password:              "foo",
                                         password_confirmation: "bar" } }
    end
    assert_template 'users/new'
    assert_select 'div#error_explanation'
    assert_select 'div.alert'
    assert_select 'div.alert-danger'
  end
end

リスト 7.34 のテストは、ヒントに従って空文字列かどうかをチェックするようにしてみました。
成功していれば何か入ってますよということです。

  test "valid signup information" do
    get signup_path
    assert_difference 'User.count', 1 do
      post users_path, params: { user: { name:  "Example User",
                                         email: "user@example.com",
                                         password:              "password",
                                         password_confirmation: "password" } }
    end
    follow_redirect!
    assert_template 'users/show'
    assert_not flash[:success].blank?
  end

最後に、production 環境で SSL 化して終わりです。
Webサーバは Rails 5.2.0 では Puma になっています。