新規投稿機能および投稿一覧表示機能
内容
新規投稿機能、投稿一覧表示機能の実装を行う。
新規投稿機能の実装の続きから
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" %>