Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

投稿アプリの複数ページで利用する表示の一部をまとめる

テックキャンプの復習です!
いいねお願いします!

### 目的
– 部分テンプレートの理解
– renderメソッドで描画方法を理解
– 部分テンプレートのメリットを理解

### 表示の一部をまとめて再利用しよう
#### 部分テンプレート
ビューファイルにおいて繰り返し使用するコードを切り出し、再利用する仕組み
rubyで繰り返し使うような処理をメソッドでまとめてきたのと同じ。

テンプレート自体のファイル名は、命名規則として、アンダースコア`_`を先頭に記述します

### 投稿表示一覧部分をまとめよう
`app/views/tweets`に`_tweet.html.erb`作成

#### renderメソッド
部分テンプレートを呼び出す際に利用するメソッド
#### partialオプション
renderメソッドで使用できるオプション
`partial`というオプションをつけ、部分テンプレート名を指定することで、該当する部分テンプレートを表示できる
例)
`<%= render partial: "sample" %>`
#### localsオプション
renderメソ

元記事を表示

投稿アプリの投稿表示順を並べる

テックキャンプのカリキュラムの復習です!
いいねお願いします!

“`ruby“`

### 目的
– orderメソッドの理解

### 投稿最新順表示
#### レコードの取得順変更
##### orderメソッド
ActiveRecordメソッド
テーブルから取得してきた複数のレコード情報を持つインスタンスの、並び順を変更するメソッド

`インスタンス = モデル名.order(“並び替えの基準となるカラム名  並び順”)`
ASC(昇順) DESC(降順)

app/controllers/tweets_controller.rb
“`ruby
def index
@tweets = Tweet.includes(:user).order(“created_at DESC”)
“`

元記事を表示

投稿アプリで本人のみ編集削除を許可しよう

オンラインスクールの復習のための備忘録です!
いいねお願いします!
### 目的
「deviseのメソッドを使用し、ユーザーのログインの有無を変える」など、アプリ制作において使用頻度の高い分岐を体験し、理解する

##ログイン中のユーザー情報取得
###投稿者本人か確認して表示を変えよう
編集ボタンと削除ボタンの表示部分をif文で囲う
“`ruby
~略~
<% if user_signed_in? && current_user.id == tweet.user_id %>

  • <%= link_to '編集', edit_tweet_path(tweet.id) %>
  • <%= link_to '削除', tweet_path(tweet.id), data: { turbo_method: :delete } %>
  • <% end %>
    ~略~
    “`
    `current_u

    元記事を表示

    投稿アプリマイページ機能の実装

    こちらも備忘録です!

    ### 目的
    – アソシエーションの理解
    – N+1問題の対策を理解

    ### ツイートにユーザー情報を追加
    「誰が投稿したのか」わかるようになり
    – 特定のユーザーがつぶやいたツイート一覧を取得できる
    – ツイートの削除を行う際につぶやいた本人しか削除できないように設定できる
    機能が実現可能になります

    #### tweetsテーブルにカラムを追加
    tweetsテーブルに新しく`user_id`というカラムを作成する
    そこにツイートを投稿したユーザーのidを保存します
    #### tweetsテーブルにuser_idカラムをinteger型で追加
    ターミナル

    `rails g migration AddUserIdToTweets user_id:integer`
    `rails db:migrate`

    ### ツイート保存時にユーザー情報も追加
    user_idカラムに、ツイートを投稿した(現在ログイン中の)ユーザーの
    idを保存する処理を記述
    ここに保存すべき値は、currenr_userのid
    #### current_userメソッド
    現在ログインしてい

    元記事を表示

    【Rails】rails generate controllerで生成されるファイルを制限する【Railsアプリ全体のジェネレータ設定変更】

    ※この記録は、プログラミング初学者である私が、行き詰まったり難しいと思ったりしたものを復習できる様にとして残している自分メモです。同じ様なところでつまずいている方のお役に立つことができれば尚よし。間違った記載等あれば教えていただければありがたいです。

    ## はじめに
    いろんなファイルを自動作成してくれるgenerateコマンド。しかし初期段階では何から何まで自動生成されると煩わしさを感じるものもあるからRailsにはジェネレーター実行時にファイルを生成しない為の設定も用意されている。
    今回は、config/application.rb内の設定によって、generate コマンドで生成されるファイルに制限をかけようかと。

    ## rails generation時の挙動を確認
    ターミナルでrails generation(またはrails g)を実行。
    下記の様な色々なファイルが自動生成される。

    “`
    $ bin/rails g controller boards
    Running via Spring preloader in process 26592
    [+] Running 2

    元記事を表示

    ユーザー管理機能

    ユーザ管理機能はとても便利なRuby on RailsのGem機能です!
    備忘録として投稿します!

    ### 目的
    – deviseを理解
    – deviseを使用したユーザー登録の理解
    ### ログイン機能の実装
    – ユーザー登録したユーザーのみがアプリを使えるようにする
    – ログインしてないユーザーは投稿機能のアプリだと
    新規作成、編集、削除機能などが使えないようにする

    ### ライブラリのインストール
     #### devise
    ユーザー管理機能を簡単に実装するためのGem
    Gemfile
    `gem ‘devise’`

    ターミナル
    `bundle install`
    Gemインストール後はサーバー再起動
    インストールしたGemの反映のタイミングが、サーバー起動時であるため
    `ターミナル`

    ### deviseの設定ファイルを作成
    #### rails g devise::innstall コマンド
    追加したdeviseというGemの「設定関連に使用するファイル」を自動で生成するコマンド

    `rails g devise:install`

    ### deviseのUse

    元記事を表示

    正規表現 – 量指定子(繰り返し)について

    # はじめに
    正規表現で、直前の文字の出現回数を指定する、量指定子の紹介と簡単な用法を例示する。
    検証は Ruby で行うため、Onigmo 正規表現ライブラリに従う。

    # 量指定子(Quantifier)

    `「」`とそれに囲まれた領域にマッチするパターンを検討する。
    “`:例文1
    aaa「bbb」ccc
    “`
    こういった文字列の `「bbb」` にマッチする表現を考える。

    その中で量指定子の種類と効果を確認する。

    ## 用法
    `「」` の中に含まれるテキストが固定内容なら、以下の様に簡単な正規表現を記述できる。

    “`ruby:基本1
    re = Regexp.new(/「bbb」/)

    p ‘aaa「bbb」ccc’.scan(re)
    # => [“「bbb」”]

    # scan なのでマッチしたすべてが配列で出てくる
    “`

    しかし、入力された文字列を対象とする場合
    `「」` に含まれる内容は文字種も長さも定まったものではないだろう。

    この不定な内容にマッチするように正規表現を書く際に、量指定子が有効である。

    量指定子にはいくつかのタイプがある。

    ## gre

    元記事を表示

    Rails パラメータを直接使って四則演算する際の注意点と解決策

    ※この記事は僕がぶち当たった問題をとりあえずChatGPTくんに丸投げしてライティングしてもらったものです。

    # はじめに
    Railsアプリケーションを開発する際に、パラメータの処理は非常に重要です。
    しかし、パラメータはデフォルトで文字列として扱われるため、予期せぬ結果が生じることがあります。
    本記事では、その中でも掛け算の処理に焦点を当て、問題の理解と解決策について説明します。

    # パラメータの文字列扱いによる問題
    Railsでは、リクエストパラメータはデフォルトで文字列として扱われます。例えば、以下のようなコントローラアクションがあるとします。

    “`ruby
    # app/controllers/products_controller.rb

    class ProductsController < ApplicationController def calculate_price price = params[:price] result = price * 5 render json: { result: result } end end `

    元記事を表示

    【Rails】form_withにおけるmodel: とは何者か?

    :::note warn
    **注記**
    この記事の投稿者はRuby on Rails初学者であり、自身の学習の備忘録目的で記事投稿を行なっております。
    情報の正確さには最大限注意をしておりますが、もし誤り等がございましたらお知らせいただけますと幸いです。
    :::

    こんにちは!
    ご覧いただきありがとうございます!
    **Ito** と申します!
    Ruby on Rails初学者です。
      
    タイトルの通り
    **form_withにおけるmodel: とは何者か?**
    個人的にわかりにくいと感じたので、端的にまとめてみました。

    ## 場面設定
    掲示板アプリを想定しています。

    * `Post`モデルの`index`ビューに、`author`(著者)を選択して`post`を検索できる検索フォームを実装しています。
    * `Post`モデルが`Author`モデルと関連付けされています。
    * `authors`テーブルと`posts`テーブルは **一対多** の関係です。

    ### モデル
    “`rb:app/models/post.rb
    class Post < Applicat

    元記事を表示

    【Rails】yieldとrenderの違い

    # はじめに
    Railsチュートリアルを進めているとview/layouts/application.html.erbの中で見かけたyieldというメソッドと部分的に描画するrenderという似たようなメソッドが目につき、これどういう違いなのかと疑問に思ったので記事にしてました。

    # そもそもapplication.html.erbって?
    Railsのビューは
    – application.html.erb → HTMLやHEADタグなどの共通レイアウト
    – アクション名.html.erb → BODYタグ内の個別レイアウト

    この二つで役割分担して画面表示している。

    application.erbはコントローラ固有のレイアウトが見つからない場合、**デフォルトで使用される共通レイアウト。**

    全てのページで使われるhead、ヘッダー、フッターなどをここで一括して書くことで個別レイアウト内で同じコードを書く必要がなくなり、DRYが保たれる。
    [(コントローラーでレイアウトを指定するにはlayoutメソッドを使う)](https://pikawaka.com/rails/layou

    元記事を表示

    [Ruby] コマンドライン用フレームワーク「Benry-CmdApp」の紹介

    ([2023年 Ruby アドベントカレンダー](https://qiita.com/advent-calendar/2023/ruby) 8 日目の記事です。もともと別の方(dzsさん)がエントリーしていましたが、キャンセルされたようなので、代打を務めます。記事公開が最終日になったのは、キャンセルに気づいたのが 2、3 日前だったからです。ご理解をお願いします。)

    サブコマンドを受け取るタイプのコマンドラインアプリケーション用に、「[Benry-CmdApp](https://kwatch.github.io/benry-ruby/benry-cmdapp.html)」というフレームワークを Ruby で開発したので紹介します。

    ## 概要

    Git や Docker や Gem のコマンドは、サブコマンド(またはアクション)を受け取ります。またサブコマンドごとに異なるオプションを受けつけます。

    “`term
    $ git commit -m “message” # 「commit」がサブコマンド

    $ docker run -it “ubuntu:lat

    元記事を表示

    【Rails】O/Rマッピング時の中間テーブル、わかりにくかったので簡単に調べた。

    :::note warn
    **注記**
    この記事の投稿者はRuby on Rails初学者であり、自身の学習の備忘録目的で記事投稿を行なっております。
    情報の正確さには最大限注意をしておりますが、もし誤り等がございましたらお知らせいただけますと幸いです。
    :::

    ご覧いただきありがとうございます!
    **Ito** と申します!
    Ruby on Rails初学者です。
      
    タイトルの通り
    **「RailsでのO/Rマッピング時、中間テーブルがどのように変換されているのか?」**
    個人的にわかりにくいと感じたので、端的にまとめてみました。

    ## 場面設定
    タグ投稿機能を持った掲示板アプリを想定しています。

    `Post`モデルが`Tags`モデルと関連付けされています。
    `posts`テーブルと`tags`テーブルは`post_tags`テーブルを介して多対多の関係です。

    ### モデル
    “`rb:app/models/post.rb
    class Post < ApplicationRecord has_many :post_tags has_many

    元記事を表示

    RubySilverメモ

    # はじめに

    Rubyの実務数年。実装やレビューにおいて困っている事は特に無いが、RubySilverに触れることで更に理解を深め、発想の引き出しを増やしたい。
    今回の記載はただの自分用メモ。Goldは別途行う予定。

    ## 学習に使用した参考サイト
    – https://rex.libertyfish.co.jp/
    – https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0

    # ローカル変数とメソッド名が同じ場合の挙動
    “`rb
    hoge = 0

    def hoge
    5 * 100
    end

    p hoge
    “`
    “`rb:実行結果
    0
    “`

    :::note
    変数の定義が優先される
    :::

    現場ではまずやらない書き方だけど理解しておくことが大切。

    # 多重代入

    ## 例
    – https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html#multiassign
    “`rb
    foo, bar = [1, 2] #

    元記事を表示

    Rspecの導入と単体テストコード

    テストは非常に重要だけど、避けていました、、、笑
    しっかり復習していきます!

    ### 目的
    – RSpecでテストのテストの書く準備
    – 基本てみなテストコードの書き方理解
    – テストコードの実行方法を理解

    ### バリデーション設定
    app/models/user.rb
    “`ruby
    validates :nickname, presence: true
    “`

    ### RspecのGem追加
    Gemfile
    “`ruby
    〜 略〜
    group :development, :test do
    gem ‘rspec-rails’, ‘~> 4.0.0’
    end
    “`
    ターミナル
    `bundle install`

    ### RSpec設定
    `rails g rspec:install`

    テストコードの結果をターミナル上に可視化する
    .rspec
    `–format documentation`

    ### テストファイル作成
    `rails g rspec:model user

    spec/models/user_spec.rb
    “`ruby
    require ‘rail

    元記事を表示

    投稿アプリ詳細表示機能 同じコードをまとめる

    今回もテックキャンプのカリキュラムの復習です!

    ### 目的
    – showアクションの処理の理解
    – before_actionを理解

    ### showアクションのルーティングを設定
    詳細画面のパスは、削除や編集と同じくツイートごとに管理
    idが1のツイート詳細画面は、`/tweets/1`パス

    config/routes.rb
    “`ruby
    resources :tweets, only: [:show]
    “`

    ### もし、7つのアクションがある場合
    “`ruby
    変更前
    resources :tweets, only: [:index, :new, :create, :destroy, :edit, :update, :show]
    変更後
    resources :tweets
    “`

    rails routesを実行
    ターミナル
    “`weet GET /tweets/:id(.:format) tweets#show“`

    ### 詳細ボタンを投稿一覧に追加
    app/views/tweets/index.html.erb
    “`ruby
    <%= link_to

    元記事を表示

    ツイートを編集

    投稿機能アプリの実装の復習を備忘録としてあげてます!

    ### 目的
    – CRUD(UPDATE)
    – HTTPメソッドのPATCH
    – edit アクションの処理の理解
    – updateアクションの処理の理解

    ### ツイート編集機能の実装
     1. ツイート編集画面のルーティング設定
     2. 編集ボタン編集ボタンをビューに追加
     3. editアクションをコントローラーに定義
     4. 編集画面のビューファイルを作成
     5. ツイートの更新を行うためのルーティングを設定
     6. updateアクションをコントローラーに定義

    「editアクションで編集ページを「表示」→「updateアクションでデータの更新」

    ### edit アクションのルーティング設定
    config/routes.rb
    “`ruby
    〜略〜
    resource :tweets, only: [:edit]
    〜略〜
    “`

    ターミナルで
    rails routesコマンドで確認
    ターミナル
    ` edit_tweet GET /tweets/:id/edit(.:format)

    元記事を表示

    Cocoapods管理ライブラリからプライバシーマニフェストと署名の対象となるSDKを調べる

    2024年春以降、Appleから指定されたSDKについて、App Store ConnectでこれらのSDKを含むアプリを提出する場合や、アプリのアップデートの一環としてこれらのSDKのいずれかを追加するアップデートを提出する場合には、プライバシーマニフェストを含める必要があります。

    https://developer.apple.com/jp/support/third-party-SDK-requirements/

    このうち、アプリに該当のSDKがCocoapods管理ライブラリで混入されているかどうかを調べるruby scriptを作成しました。

    # ファイル
    以下の2ファイルを同じディレクトリに配置します。
    `pod_file_path`は任意のPodfile.lockのパスに置き換えてください。

    “`check.rb
    def find_matching_keywords(text, keywords)
    text = text.downcase

    matching_keywords = []

    keywords.each do |keyword|

    元記事を表示

    [Ruby]こんなものをeachで回すんじゃあないよ

    すっかり寒くなりましたね。
    みなさん、each使ってますか??便利で利用シーンの多いこの子ですが、どんな構造のデータに対して使うべきかを考えなければ、読みにくく、拡張性の低いものになってしまいます。今回の記事では、僕のeachに突っ込むデータの変遷を晒し上げ、「**こんなものをeachで回すんじゃあないよ**」と言いたくなるようなアンチパターンの配列(ハッシュ)を紹介していきます。

    今回出力したい内容は以下の通り。

    “`
    Tom(年齢:23歳、身長:170cm、出身国:Canada)
    Mika(年齢:27歳、身長:150cm、出身国:Japan)
    Brown(年齢:23歳、身長:170cm、出身国:Brazil)
    “`

    それではeachで回してみましょう!!

    ## フェーズ1:配列しか勝たん

    “`ruby
    person_info_array = [[‘Tom’, 23, 170, ‘Canada’],
    [‘Mika’, 27, 150, ‘Japan’],
    [‘Brown’, 19, 1

    元記事を表示

    Ruby 3.3で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について

    ## はじめに

    2023年12月25日に、Rubyの新しいバージョンであるRuby 3.3がリリースされました。
    一方、2021年12月2日に出版した書籍「[プロを目指す人のためのRuby入門 改訂2版](https://gihyo.jp/book/2021/978-4-297-12437-3)」(通称・チェリー本。以下、本書)は執筆当時最新だったRuby 3.0を対象にしています。

    本書は紙の本であるため、簡単に内容をアップデートすることができません。しかし、何もしないとどんどん内容が古くなってしまい、「本の通りやってみたけど、今使っているRubyとなんか動きが違う」ということになってしまいます。

    そこで新しいRubyのバージョンがリリースされて、本書の説明と異なる部分が出てきたときは、毎回ネット上でその差異を説明するようにしています。その説明を読めば、動きが違う部分があってもきっと落ち着いて対処できるはず、という算段です。

    というわけで、この記事ではRuby 3.3で発生する「プロを目指す人のためのRuby入門 改訂2版」との差異について説明します(第1版との差異ではないの

    元記事を表示

    Ruby芸160チャレンジ(#31)正規表現のパターン利用

    ## この記事は何
    [shellgei160を通じて言語習得 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/learning-via-shellgei160)に参加しています。

    書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

    例題はこちらのリポジトリで公開されているものに限ります。
    https://github.com/shellgei/shellgei160

    ## 実行環境など
    – Docker image: ruby:3.0.2
    – 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下に`answer-ruby`ディレクトリを作り、その中に解答となるファイルを作成していきます。

    ## 今回のテーマ
    `#24`以降、しばらく題材的に取り組みづらいものが続くので`#31`まで飛ばします。

    https://github.com/shellgei/shellgei160/blob/master/answer/31.md

    元記事を表示

    OTHERカテゴリの最新記事