新規投稿機能および投稿一覧表示機能

内容

新規投稿機能、投稿一覧表示機能の実装を行う。

新規投稿機能の実装の続きから

2. ビュー、CSSの作成

ビューファイルを作成し、編集
ルーティングを設定
postsコントローラーでnewアクション、createアクションの中身を定義
※その際、params.require.permit.mergeでデータを取得
今回のアプリでは、投稿一覧ページと投稿詳細ページ以外は、ログインしているユーザーしか遷移できないようにする
posts_controller.rb

before_action :authenticate_user!, execpt: [:index, :show]

3. バリデーションの設定

バリデーションをpost.rbに記述
URLのバリデーション設定はネットで調べたら上の正規表現が出てきたが、rubocopでコードを自動整形したところこの表現は廃止されていて訂正された
よって、下の正規表現を用いること

# 廃止
validates :url, format: /\A#{URI::regexp(%w(http https))}\z/
# 以下を使う
validates :url, format: /\A#{URI::DEFAULT_PARSER.make_regexp(%w[http https])}\z/

4. Postモデルの単体テストコードの実装

spec/factoriesディレクトリ内のposts.rbファイルに投稿情報をFactoryBotで指定
FakerでランダムなURL、0より大きい数値を作成したい場合、以下の通り
posts.rb

{ Faker::Internet.url(scheme: 'https') }
{ Faker::Number.positive }

テストコードをpost_spec.rbファイルに記述
実装が完了後、rspecコマンドでテストを実行
ターミナル

% bundle exec rspec spec/models/post_spec.rb

5. Rubocopでコードを自動整形

ターミナル

% rubocop -a

投稿一覧表示機能の実装

1. ビュー、CSSの作成

ビューファイルを編集
postsコントローラーのindexアクションを記述

次回

投稿一覧ページのビューで迷い中。構成を変えるかも。

参考

link_toのリンク先を別タブで表示したい時

同じタブでリンクを開く場合、以下の通り
index.html.erb

<%= link_to "表示したい文字", "リンク先のURL" %>
# もしくは
<%= link_to "表示したい文字", "リンク先のURL", target: :_self %>
# target: :_selfは、リンクのデフォルト値のため省略可能

別タブで開きたい場合、以下のように記述する
index.html.erb

<%= link_to "表示したい文字", "リンク先のURL", target: :_blank %>

しかしこれだけだとセキュリティ面、パフォーマンス面に問題あり!
以下のように追記する必要がある
index.html.erb

<%= link_to "表示したい文字", "リンク先のURL", target: :_blank, rel: "noopener noreferrer" %>