Techioz Blog

CRUD スキャフォールディング後にテーブル ビューが表示されない

概要

私は現在、この特定のチュートリアル https://www.youtube.com/watch?v=fmyvWz5TUWg&t=2625s に従って Ruby on Rails について学習しています。

コマンド Rails g scaffold friends name:string email:string Phone:string を実行した後、rails db: Migrate を実行すると、その単純な友人モデル (名前、電子メール、電話のすべての文字列) への CRUD 構造が完成しました。

http://localhost:3000/friends にアクセスすると、友達のリストが奇妙な方法で表示されることを除いて、すべてが順調で、すべて正常に動作します。私は各行が友達であるテーブルを期待していましたが、その代わりに、各友達が垂直に表示される垂直構造になりました…

インデックス.html.erb

<p style="color: green"><%= notice %></p>

<h1>Friends</h1>

<div id="friends">
  <% @friends.each do |friend| %>
    <%= render friend %>
    <p>
      <%= link_to "Show this friend", friend %>
    </p>
  <% end %>
</div>

<%= link_to "New friend", new_friend_path %>

_friend.html.erb

<div id="<%= dom_id friend %>">
  <p>
    <strong>Name:</strong>
    <%= friend.name %>
  </p>

  <p>
    <strong>Email:</strong>
    <%= friend.email %>
  </p>

  <p>
    <strong>Phone:</strong>
    <%= friend.phone %>
  </p>

</div>

イメージ図:

何か設定が間違っていると思いますが、何が間違っているのかわかりません。

すべてのソースコード: https://github.com/Paul-Bob/RailsFriends

解決策

私も同じ問題を抱えており、解決策を探していたときにあなたの質問に遭遇しました。理由はわかりませんが、Rails チームはインデックス テンプレートを変更する決定を下したようです。おそらく、多くの人がテーブルのレイアウトに独自の具体的な方法を定義したいと考えているからでしょう。

カスタム足場テンプレート

スキャフォールディングを使用する必要があり、生成されたインデックスを毎回変更する必要がない場合は、独自のカスタム スキャフォールディング テンプレートを作成できます。

カスタムテンプレートの説明

この人はこれを行う方法をうまく説明しています。

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://web-crunch.com/posts/how-to-create-custom-scaffold-templates-in-ruby-on-rails

デフォルトのテンプレート

参考としてデフォルトのテンプレートを参照するとよいでしょう。これらは Rails インストール内にあります。私は Windows 上で実行しているため、次の場所にあります。

C:-x64\3.1.0.3.1テンプレート

フォルダー構造はどのプラットフォームでも同様です。

GitHub のデフォルトのテンプレート

GitHub でソースを見ることもできます。ここにあります:

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://github.com/rails/rails/tree/main/railties/lib/rails/generators/erb/scaffold/templates

「index.html.erb.tt」を具体的に見ると、履歴にアクセスして、テーブルとして表示されたときからどこが変更されたのかを確認できます。テンプレートを「最新化」する変更が 2021 年 2 月 4 日に行われたようです。それより前のバージョンを見ると、テーブルを生成できるものが存在するはずです。

別のチュートリアル

これは、ブートストラップとシンプル フォームを使用するテンプレートを生成する別の例です。私はすでに Bootstrap を使用していて、Gemfile に Simple Form を追加するだけだったので、これが非常に適していることがわかりました。

gem 'simple_form'

再生足場

上記の例からテンプレートを取得した後、それらを使用してビューを再生成したいと思いました。これは次のようにして実行できます。

rails g erb:scaffold friend first_name last_name phone twitter

免責事項

昨日、文字通り初めて Ruby を見たので、この回答には編集が必要になる可能性があります。 :)