- 1. 3-13. 詳細ページを表示しよう
- 2. 3-12. ツイートを投稿しよう – index
- 3. 3-8. ツイートを投稿しよう – new
- 4. 管理者側ジャンル機能の作成の仕方
- 5. 【Rails】DB接続のないログイン画面でバリデーションする
- 6. fetchメソッドの基本
- 7. Ruby on railsインストール opensslでハマった話※Mac
- 8. if,else問題(演算子)
- 9. 【AWS】EC2インスタンスへのログイン
- 10. [Ruby 3.1]多重代入の評価順序変更について検証
- 11. Rakeタスクのdescに実行例を書いてちゃんと活用する
- 12. mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e)) の解決策
- 13. railsにActionTextを導入したら、showページで投稿が変になっちゃったので対処
- 14. Ruby Gold 3.1の対策と出題傾向について(2022年11月)
- 15. 【Rails】accepts_nested_attributes_forを使って子モデルも保存
- 16. 任意の文字列を部分的に削除するプログラムの実装
- 17. デプロイをした後の運用方法
- 18. deviseのサインアップ時に名前を登録できるようにする
- 19. deviseを用いた「ユーザー管理機能」の実装フロー
- 20. 【Ruby】Adobe Acrobat Reader DC印刷コマンド実行の注意点
3-13. 詳細ページを表示しよう
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# はじめに
今回はツイートの詳細ページを作ります。
一覧ページに並んでいるツイートをクリックすると、そのツイートに関する詳細が見られるページというイメージです。
3-12. ツイートを投稿しよう – index
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# GOAL
– tweetした内容の一覧を表示する# ▼▼▼実装&解説動画
3-8. ツイートを投稿しよう – new
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# はじめに
今回は投稿フォームを作ります。
※ 3-4の末尾にある、『復習問題』を終わらせている前提で進めています。
やっていないと途中でエラーが出てしまうので、必ずやっておきましょう。# 概要
管理者側ジャンル機能の作成の仕方
## ジャンル機能について
今回はジャンル機能について記述していきたいと思います。
前提として今回は顧客と管理者側に分けており、管理者側の方にジャンル作成していきます。
※adminは管理者の事です。## ジャンルのモデル作成
“`
$ rails g model Genre
“`
のコマンドを打ち込み作成します。その後にマイグレーションファイルを開きカラムを追加。
“`db/migrate/_create_genres.rb
class CreateGenres < ActiveRecord::Migration[6.1] def change create_table :genres do |t| t.string :name t.timestamps end end end ``` t.string :nameを追加してあげましょう。 nameは今回ジャンルに追加する名前の事です。 ``` $ rails db:migrate ``` 忘れずにrails db:migrateをしたら下準備は完了です。 ##
【Rails】DB接続のないログイン画面でバリデーションする
## はじめに
バリデーションは,ActiveRecordの機能として実装できますが,ActiveRecordはORMのフレームワークであるため,DB接続が必要になります.
そのため,DB接続しないモデルにはActiveRecordが使えません.
今回はActiveModelを用いて,DB接続しないモデルへバリデーションを実装する方法を整理しました.Rails初学者による記事になります.
不足,間違い等ありましたらご指摘いただけますと幸いです.## 環境
Ruby 3.0.4
Rails 6.1.7## やりたいこと
DBに接続しないsessionモデルで作成したログイン画面に,バリデーションを実装します.## 実装方針
1. sessionモデルに,`ActiveModel::Model`をミックスインすることで,バリデーション機能を有効にする.
1. sessionsコントローラで,`valid?`メソッドを用いて,バリデーションをトリガする.
1. sessionsビューのnewファイルで,エラーメッセージを出力する.## Modelでバリデーション機能を実装
fetchメソッドの基本
## `fetch`メソッドとはなんぞや
最近よく見かける`fetch`メソッドは、ハッシュのキーを指定して、そのキーに関連する値を取得することができるメソッドです。
ハッシュの中にあるオブジェクトに対して使うことができます。
## 使い方
具体的な使用方法を説明します。
### 使用例
“`rb
goriras = {“gorira1” => 100, “gorira2” => 200, “gorira3” => 300}
puts goriras.fetch(“gorira1”)
100
“`
`goriras`という名前のハッシュオブジェクトがあるとします。
上の例では、`gorira1`というキーが指定されています。
このようにすると、キー`gorira1`の値`100`を取得できます。
Ruby on railsインストール opensslでハマった話※Mac
## 1.rbenvインストール
“`
brew install rbenv
“`
“`
rbenv install 3.1.2
“`
テスト用フォルダ作成
“`
mkdir ~/ruby-test
cd ~/ruby-test
“`
テストフォルダへruby反映
“`
rbenv local 3.1.2
rbenv rehash
“`
反映確認
“`
ruby -v
“`rails インストール※bundlerはインストール済み
“`
gem install rails
“`
しかし、、
“`
ERROR: While executing gem … (Gem::Exception)
OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources
“`
opensslが利用できないとのことなので
“`
brew link openssl –force
“`
しかし、
“`
Warning: Refus
if,else問題(演算子)
police_troubleメソッドを実装。
あなたは警官です。
aとb二人の容疑者の取り調べをしています。このとき、次のルールで証言の真偽判定を行います。
※問題文で登場したaとb二人の容疑者は、今回実装するpolice_troubleメソッドの引数として取り扱っていきます。– 第一引数aと第二引数bどちらの証言も真(true)であれば、Trueを出力すること
– 第一引数aと第二引数bどちらの証言も偽(false)であれば、Trueを出力すること
– 第一引数aと第二引数bで証言の真偽が一致しない場合であれば、Falseを出力すること“`ruby:雛形
def police_trouble(a, b)
# ここに条件式を記述する
end# 呼び出し例
police_trouble(true, true)
police_trouble(false, false)
police_trouble(true, false)“`
“`ruby:出力例
police_trouble(true, true) → True
police_trouble(false,
【AWS】EC2インスタンスへのログイン
# はじめに
rails初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。# EC2インスタンスへログイン
EC2インスタンスを作成すると、「ec2-user」というユーザーと対応するssh秘密鍵が生成されます。「ec2-user」を使用してログインします。“`bash.ターミナル(ローカル)
% cd ~
“`
“`bash.ターミナル(ローカル)
% mkdir ~/.ssh# .sshというディレクトリを作成
# File existsとエラーが表示されたとしても、.sshディレクトリは存在しているのということなので、そのまま進みましょう。
“`
“`bash.ターミナル(ローカル)
% mv Downloads/ダウンロードした鍵の名前.pem .ssh/# mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.ss
[Ruby 3.1]多重代入の評価順序変更について検証
# あらすじ
Ruby3.1のバージョンアップ作業に伴い多重代入の評価順序変更について影響箇所を調査する必要が出ました。
この記事では、3.0以前から3.1にアップデートしたときに具体的に何が変わったかを検証しました。# 多重代入の評価順序変更とは?
以下のような多重代入について、
“`ruby
foo[0], bar.baz = a, b
“`Ruby 3.0 以前では右辺=>左辺の順序で評価されてましたが、
3.1 からは **左辺=>右辺** の評価順に変更されました。( [リリースノート参照](https://www.ruby-lang.org/ja/news/2021/12/25/ruby-3-1-0-released/) )# 検証内容
3.0 と 3.1 で同じコードを試してみて puts で実行順序を検証します。
## 検証1:左辺と右辺どちらが先に呼び出されるか確認
コード:
“`ruby:a.rb
def a=_
@hoge ||= ‘first called a=’
end
def x
@hoge ||= ‘first ca
Rakeタスクのdescに実行例を書いてちゃんと活用する
仕事でRuby on Railsを使っていて、Rakeタスクもよく使っている中で、
実行例もコマンドで確認できるようにした話です。## Rakeタスクとは
Rubyで書かれたコードをタスクとして作成しておき、必要に応じて呼び出し実行できる機能です。https://opiyotan.hatenablog.com/entry/rails-rake-task
## 実行コマンド忘れる問題
Rakeタスクの種類が増えてくると、Rakeコマンドで実行する際に、正しいコマンド名や引数の渡し方などを毎回忘れてしまうという問題が出てきました。
“`ruby
namespace :hoge do
# 実行例: bundle exec rake ‘hoge:fuga[1, 10, 20, 30]’
desc ‘ほげほげする’
task :fuga, %i[hoge_id] => :environment do |_, args|
# 処理
end
end
“`
こんな感じでコード内にコメントで実行例が記述されていたりはしたのですが、毎回Rakeファイルのコードを探すのが
mach-o file, but is an incompatible architecture (have (x86_64), need (arm64e)) の解決策
## 実行環境
– M1 mac
– Rails 7.0.4
– ruby 3.1.0## エラー内容
`rails s`を実行しようとすると次のようなエラーが出てきた。
“`bash
$ rails s
/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require’: dlopen(/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/ffi-1.15.5/lib/ffi_c.bundle, 0x0009): tried: ‘/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/ffi-1.15.5/lib/ffi_c.bundle’ (mach-o file, but is an incompatible archit
railsにActionTextを導入したら、showページで投稿が変になっちゃったので対処
プログラミング学習2か月ちょいのクソ雑魚初心者です。
現在ポートフォリオでActionTextを導入した際に起こったエラーについて忘れないためにメモ書きと同時に、こちらへ初投稿しようと思い立ちました。# 発生した問題
Ruby on Railsで投稿サイトを作っていて、下の画像みたいな感じに投稿画面にActionTextを導入しました。
![222222222222.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885423/6438cce8-4a4e-5d75-fccc-fc89e6f5d2df.jpeg)# で、投稿フォームは問題なかったけど投稿後のshowページが…
試しにテストで投稿します。
![222222222222.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885423/19c7312e-aea3-d702-84a3-a76d45a19134.jpeg)
すると、、、
![333333333
Ruby Gold 3.1の対策と出題傾向について(2022年11月)
# 最初に
Ruby技術者認定試験がversion 2.1 -> 3.1に改訂されました。
Gold 2.1は受けたことがないので3.1で初めてのGold受験でしたが無事合格することができました。
2023年1月20日までに受ければ落ちても2回目無料キャンペーン中だったのでメンタル的にもちょうど良かったです!https://www.ruby.or.jp/ja/certification/examination/version3.html
私の場合は昨年シルバー2.1を取得済みだったので、今回ゴールド3.1を取得したことで認定ver3プログラマGoldを名乗れるようです。
https://www.ruby.or.jp/ja/news/20220712
新しいバージョンってどうなの??とまだ様子見している方もいらっしゃると思います。
私も試験前にGold 3.1の情報が少なく対策に不安があったので、少しでも参考になればと思い記憶が新しいうちに情報を残そうと思います!# 経歴
私の経歴としてはこんな感じです。レベル感の目安になれば。2021年2月 初めてプログラミング学習
【Rails】accepts_nested_attributes_forを使って子モデルも保存
## まえがき
推奨されてないaccepts_nested_attributes_forを使わずに、親モデルに紐づくレコードの一括保存をしようとしたが結局うまくいかずaccepts_nested_attributes_forを使ったときの備忘録。以下の記事を参考にしましたが、私はうまくいきませんでした。
https://zenn.dev/murakamiiii/articles/5ecefb7a58d1ef
## accepts_nested_attributes_forを使ってみる
親クラスに“`accepts_nested_attributes_for :テーブル名“`を追加“`ruby :event.rb
class Event < ApplicationRecord has_many :possible_dates, dependent: :restrict_with_exception accepts_nested_attributes_for :possible_dates end ``` ```ruby :possible_dates.rb c
任意の文字列を部分的に削除するプログラムの実装
missing_charメソッドを使った実装。
– 対象となる文字列からn番目の文字を削除すること
– 削除された文字以外の文字列を出力すること
“`
def missing_char(str, n)
# 処理を記述
end# 呼び出し例(1つ目の引数には対象となる文字列を、2つ目の引数には対象となる文字列から何番目の文字を削除するのかを指定しましょう)
missing_char(‘kitten’, 1)
“`slice!メソッドの説明
配列や文字列から、指定した要素を削除し、削除したあとの要素を返すメソッド。
「 ! 」がつくメソッドを破壊的メソッドという。
“`ruby:例
string = “abcdefg”
string.slice!(2)puts string
#=> “abdefg”
# 2番目の要素のcが取り除かれている
“`“`ruby:回答
def missing_char(str, n)
str.slice!(n – 1)
puts str
end# 呼び出し例
missing_char(‘kitten’, 1
デプロイをした後の運用方法
## デプロイの運用方法
今後も使う事があると思うのでメモとして残しておきます。#### EC2へSSHでログインする
“`
username:~/environment $ ssh -i ~/.ssh/practice-aws.pem ec2-user@xx.xx.xx.xx
“`@xx.xx.xx.xxはEC2のパブリックIPアドレス
## アプリケーションへ移動
“`
[ec2-user@ip-xx-xx-xx-xx ~]$ cd アプリケーション名
“`
## GitHubからpull
最新のコードをGitHubからpullして持ってくる
“`
[ec2-user@ip-xx-xx-xx-xx アプリケーション名]$git pull origin main
“`## 変更したフォルダーによる運用方法
Gemfileを変更した場合
1. ローカルからリモートリポジトリへpush
2. SSHでEC2へ接続
3. EC2上でアプリケーションへ移動
4. git pullする
5. 以下コマンドを実行
“`
[ec2-user@ip-xx-xx-xx-
deviseのサインアップ時に名前を登録できるようにする
deviseにてログイン機能を実装すると、
サインアップ時に登録できる情報はデフォルトとして 「メールアドレス」「パスワード」が用意される。今回は「メールアドレス」「パスワード」に加えて「名前」を登録できるようにする。
# テーブルにカラムを追加
現状、カラムは「メールアドレス」と「パスワード」のみであるが、ここに「名前」を追加する。
:::note warn
データベースは表形式のテーブルで管理される。
この表形式の行をレコード、列をカラムという。
:::ターミナルにて下記を実行することで、「追加先テーブル」に「追加するカラム」を追加することができる。
“`ruby:ターミナル
% rails g migration Add カラム名 To 追加先テーブル名 追加するカラム名:カラムの型
“`名前を登録できるようにしたいため、「カラム名」を`Nickname`とする。
*「追加先テーブル名」は`User`、カラムの型は`string`とする。“`ruby:ターミナル
% rails g migration AddNicknameToUsers nickn
deviseを用いた「ユーザー管理機能」の実装フロー
Gemのひとつである「devise」を使用することで、「ユーザー管理機能」を実装することができる。
# deviseの実装フロー
1. Gemのインストール
2. 設定ファイルを作成
3. モデルを作成
4. テーブルを作成
5. ビューを作成## 1. Gemのインストール
-Gemfileを編集する
“`ruby:gemfile
# 中略
gem ‘devise’
“`
-コマンドを実行
“`ruby:ターミナル
% bundle install
“`
:::note info
Gemfileに追加したいGemの名前やバージョンを記述してbundle installを実行することで、
指定したGemをアプリケーションにインストールができる
:::
-サーバーを再起動
“`ruby:ターミナル
% rails s
“`
:::note warn
下記を変更した際は、ローカルサーバーを再起動する
■Rubyバージョン
■テーブル・カラム情報
■Gemの導入状況
:::## 2.設定ファイルの作成
“`ruby:ターミナル
% rails g insta
【Ruby】Adobe Acrobat Reader DC印刷コマンド実行の注意点
## Rubyで印刷する
RubyではKernelモジュールのお陰でRubyファイル上からでもコマンドプロンプトが叩けるようになっている。
“`ruby
# プロセス完了まで待つコマンド実行
process1 = system “dir”
# プロセス実行が完了したらRubyのプロセスに戻る
process2 = spawn “dir”
“`
印刷する場合はAdobe Acrobat Reader DCのシステムコールを使用して実行すれば良い
“`batchfile
“(exeまでのパス)\AcroRd32.exe” /s /l /h /t “(PDFファイルのフルパス)” “(プリンタ名)”
“`
※64bit版はAcrobat.exe
※オプションの意味は本題とずれるのでググってくれ!## 本題
上記方法を使用すれば印刷はできるが、`system`と`spawn`のどちらを使用すべきかと言われたら迷わず`spawn`をお勧めする。印刷の自動化が要求される場面は、昔ながらの書類管理をしている業務の自動化くらいだろう。
そういう現場でよくあるのが、印刷プロセスのスタッ