- 1. 【Rails】「教材シェア」アプリを作成しました
- 2. [Rails]基本理念について
- 3. RubyのPythonとの基本構文の違いをまとめ
- 4. railsチュートリアル第6章 ユーザーオブジェクトを検索する
- 5. 「1 – 20 / 35件 < >」のような日本語ページネーションを追加する[Rails, kaminari]
- 6. 本番環境で背景画像を表示
- 7. 【Ruby on Rails】Captureメソッドを使ってテンプレート化をする方法
- 8. 破壊的メソッドと非破壊的メソッドの違い
- 9. [Ruby] AtCoder過去問 B – Increment Decrement
- 10. Ruby と Rails のバージョン表
- 11. 【Rails】非同期によるDMチャット機能の実装【細かく噛み砕いて解説】
- 12. [SQL]基礎的なこと
- 13. rails s を実行した際に`Gem Load Error is: AddDllDirectory failed for C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/pg-1.2.3/lib/x64-mingw32`が発生した時の解決方法
- 14. 【Rails】いいね/コメント/フォロー/DMの通知機能
- 15. lメソッドを用いた際のエラー解決:translation missing[Rails, I18n]
- 16. [Ruby] AtCoder過去問 B – Coins
- 17. 【Rails】マイグレーションでDATE型のデフォルトを現在日時にする
- 18. Ruby + Seleniumでweb上のファイルをダウンロードする(Windows)
- 19. 【rails】 存在しないデータにアクセスした時の例外処理
- 20. Rails 7 をちょこっと試す(さらば、Webpacker 編)
【Rails】「教材シェア」アプリを作成しました
## 1.はじめに
閲覧していただきありがとうございます。
今回作成したアプリの経緯や開発の苦悩などをまとめました。
よろしければ、ご覧ください。
## 2.関連URL
アプリ:https://teaching-materials-app.herokuapp.com/
Github:https://github.com/suugakusan/teaching_materials_app
## 3.アプリ概要
教員同士で教材をシェアし、生徒と向き合う時間を確保することをテーマにしたアプリです。* 教材のデータを作成・編集・削除機能
* フォロー機能
* 投稿への「お気に入り」機能実装し「お気に入り」したものは一覧で閲覧可能
* 投稿のタイトル(内容)で検索機能(教科名も可)## 4.アプリの制作背景
私が教員として働く中で、生徒と向き合う時間が十分に取れないほど、数多くの仕事で溢れていました。本来であれば、教材研究する時間を確保し、生徒に実りある学習を提供しなければいけません。 しかし、それ以外の業務に時間をかけており、教材研究が全くできないのが今の現状です。同僚も同じように、
[Rails]基本理念について
# はじめに
本記事では、railsの基本理念について、まとめてみました。# 基本理念
## DRY
railsでコードを書く時には、
同じ情報を繰り返し記述することは、コード的にも、見る人にも良くはありません。`DRY`とは、`Don’t Repeat Yourselfの略`
`同じ情報を繰り返し記述しない`というものです。`スマブラのドンキーコング`を想像してください。
(ちょっと強引ですので、ご容赦)`DRYを意識していない`ドンキーコング
“`
ジャブ = ドンキーのAボタン
パンチを溜める = ドンキーのBボタン
ジャンプする = ドンキーのYボタン– 「ドンキー」を修正する場合、3箇所もあるので、工数がかかる
– 一つだけ「ドンキー」のまま未修正に気づかなかった場合のリスク有
“``DRYを意識した`ドンキーコング
“`
fighter = ドンキー
ジャブ = fighter の Aボタン
パンチを溜める = fighter の Bボタン
ジャンプする = fighter の Yボタン– 変更点が1つだけなので、修正工数が少ない
RubyのPythonとの基本構文の違いをまとめ
業務でPythonを使っていますが、ひょんなことからRubyを学ぶ機会が出来たのでPythonとの基本的な構文の違いをメモしていきます。
似ている所も多いので、業務と趣味で使っていたら混乱しそうだ…# RubyとPythonの同じところ
## すべてがオブジェクト
RubyもPythonもオブジェクト指向言語なので、すべてがオブジェクトです。## インクリメント、デクリメントの演算子が無い
num++やnum–が使えません。
代わりに、num+=1, num-=1を使います。
__サンプルコード__“`ruby
num_1 = 10
num_1 += 100
puts(num_1) # -> 110num_2 = 10
num_2 -= 100
puts(num_2) # -> 90
“`## 数値と文字列の暗黙的な変換は行われない
`1 + “1” = 2`
`1 + “1” = 11`
みたいなことは行われません。
__サンプルコード__“`ruby
puts(1 + “1”) # -> `+’: String can’t be coerce
railsチュートリアル第6章 ユーザーオブジェクトを検索する
###ユーザーオブジェクトを検索する
Active Recordには、オブジェクトを検索するための方法がいくつもあります
過去に作成した最初のユーザーを探してみましょう。
3番目のユーザー(foo)が削除されていることを確認しましょう。まずは存在するユーザーから探してみましょう。“`rb
>> User.find(1)
User Load (0.2ms) SELECT “users”.* FROM “users” WHERE “users”.”id” = ? LIMIT ? [[“id”, 1], [“LIMIT”, 1]]
=> #
>> User.create(name: “A Nother”, email: “another@example.org”)
(0.1ms) begin transa
「1 – 20 / 35件 < >」のような日本語ページネーションを追加する[Rails, kaminari]
## はじめに
以下のようなページネーションを作成しました。
実現したコードを記載したいと思います。![スクリーンショット 2021-09-24 17.34.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779676/e9242459-7e07-52f7-80dc-b8ed9e46e2f9.png)
## コード
“`html:app/views/tests.html.erb
<%= page_entries_info @tests %>
<% if @tests.total_count > @tests.limit_value %>
<%= link_to '<', path_to_prev_page(@tests) %>
<%= link_to '>‘, path_to_next_page(@tests) %>
<% end %>
“`“`ruby:app/controllers/test_controller.rb
def index
@tests = Tes
本番環境で背景画像を表示
#課題
ローカル環境で表示できていた、背景画像が本番環境では表示されなくなった。調べてみたところ、アセットパイプラインにおいてエラーが発生していると分かった。備忘録として記録。
#行なったこと
####1.画像配置場所の変更
変更前:`app/assets/images/back.png`
変更後:`public/images/back.png`
####2.image-url( ) の利用
`css`を`scss`に変更し、`url(“back.png”)`を`image-url(“back.png”)`に変更。“`index.scss
.main{
background-image: image-url(“back.png”);
}
“`
####3.本番環境でアセットパイプラインが自動で通るように設定を変更
変更前↓“`config/environments/production.rb
config.assets.compile = false
“`変更後↓
“`config/environments/production.rb
config.asse
【Ruby on Rails】Captureメソッドを使ってテンプレート化をする方法
#対象者
* captureメソッドを使用したことない人
* テンプレート化を簡単に実行したい人#目的
* captureメソッドを使用することで簡単にテンプレートを作成する
#実際の手順と実例
###1.captureメソッドとは> captureメソッドを使用することで、テンプレートの一部を変数に保存することができます。保存された変数は、テンプレートやレイアウトのどんな場所でも自由に使用できます。
※Railsガイド参照使ってみると使いまわしたい文章や表を簡単にテンプレート化できるなと考えて、使ってみました。
###2.メソッドの使い方
““index.html.erb
<% @greeting = capture do %>ようこそ!日付と時刻は<%= Time.now %>です
<% end %>
““この時点では、ページに表示されません。
あとは<%= @greeting %>を自分の好きな箇所に設置すればOKです!#参考にさせて頂いた記事
* [Railsガイド 6.5 CaptureHelper](htt
破壊的メソッドと非破壊的メソッドの違い
破壊的メソッドと非破壊的メソッドの違いをちゃんと理解していなかったためmemoしておく。
## 非破壊的メソッドとは
“`
gorira = “kojiro”
puts gorira.upcase
puts gorira
“`“`
#=>KOJIRO
kojiro
“`
レシーバーである、gorira自体の値はそのままkojiroという小文字のままで保持される。## 破壊的メソッドとは
それに対して破壊的メソッドはこんな感じ。“`
gorira = “kojiro”
puts gorira.upcase!
puts gorira
“`“`
#=>KOJIRO
KOJIRO
“`レシーバーである、gorira自体の値もKOJIROという大文字に変更してしまうことができる。
こんな感じ。
[Ruby] AtCoder過去問 B – Increment Decrement
##はじめに
AtCoder過去問B問題をRubyで解いてみました。
よろしくお願いします。問題はこちらから確認してください↓
https://atcoder.jp/contests/abc052/tasks/abc052_b
##B – Increment Decrement
まず入力を受け取ります。
“`ruby
n = gets.to_i
s = gets.chars
“`2行目は文字列を一つずつ区切って、配列にしています。
入力例1でいえば、“`IIDID“`を“`[“I”, “I”, “D”, “I”, “D”]“`という配列で受け取っています。次にxを用意して、一回一回のxの結果を記録していく配列x_aryを用意します。この配列には0(xの初期値)を代入しておきます。
“`ruby
n = gets.to_i
s = gets.charsx = 0
x_ary = [0]
“`準備は完了したので、配列sをeach文で回してIだったら+1、Dだったら-1という作業を行い、それぞれの結果のxの値をx_aryに記録(追加)していきます
Ruby と Rails のバージョン表
##自分用にRailsとRubyの対応用表まとめてみたよ
|RailsVersion|必須Ruby|推奨Ruby|RubyGem|
|—|—|—|—|
|6.2.0|>= 2.5.0|3.0.x|>= 1.8.11|
|6.1.x|>= 2.5.0|3.0.x|>= 1.8.11|
|6.0.x|>= 2.5.0|2.6.x|>= 1.8.11|
||< 3.0.0||| |5.2.x|>= 2.2.2|2.5.x|>= 1.8.11|
||< 2.6.0||| |5.1.x|>= 2.2.2|2.5.x|>= 1.8.11|
||< 2.6.0||| |5.0.x|>= 2.2.2< 2.5.0|2.4.x|>= 1.8.11|
|4.2.x|>= 1.9.3|2.2|>= 1.8.11|
|4.1.x to 4.2.0|>= 1.9.3|2.1|>= 1.8.11|
|4.0.5 to 4.1.0.rc2|>= 1.9.3||>= 1.8.11|
|4.0.0 to 4.0.x|>= 1.8.7||>= 1.8.11|
|3.2.x|1.8.7|2.2|>
【Rails】非同期によるDMチャット機能の実装【細かく噛み砕いて解説】
# 前提条件
・Rubyバージョン2.6.5
・Railsバージョン6.0.0
・jQueryを導入済み→未導入の方は、自分が書いた[こちらの記事](https://qiita.com/RIN_HM/items/bdbd76f5015b3c15bfe9)をご参照ください。
・gem ‘devise’によるユーザー管理機能を作成済み。・チャットページへの遷移元となるユーザー詳細ページを作成済み。
“`app/views/users/show.html.erb
<% if current_user.id != @user.id %>
<%= link_to "#{@user.name}さんとチャットする", chat_path(@user.id) %>
<% end %>
“`# この記事の構成
①チャットに必要なモデルの作成
②各モデルへのアソシエーション及びバリデーション設定
③ルーティング設定
④cahtsコントローラーの作成と記述
⑤チャットをするビューの作成
⑥非同期処理に必要な`~.js.erb`ファイルの作成
⑦エラーメッセージを表示するファイルの作成#
[SQL]基礎的なこと
# はじめに
本記事は、SQLの基礎的な部分について記述します。
そういえば、SQLってなんだっけ?と恥ずかしながら疑問に思ったため記述します。# SQLとは
`DBを操作する言語`です。
「Structured Query Language」の略
↑(追記)
コメント欄にて、略語ではないという参考サイトと指摘をいただきましたので、
ここで改めて訂正します。申し訳ありません。Structured = 構造化
Query = 問い合わせ
by Google先生私は、Rubyを使っているので`rails db:createコマンド`や、
Sequel Pro(シークエルプロ)を使用したデータの書き換えは行ってきました。これらの操作は、
最終的にSQLという言語が`実行されて実現する仕組み`になっており、
SQLを直接使用せずに、
「特定のコマンドの実行」や「GUI操作」を実現できます。# SQLによるデータベースの操作
データベースやテーブルに対して命令でき、大きく以下の3つに分類されます。
– `データを定義`「DDL(Data Definition Language
rails s を実行した際に`Gem Load Error is: AddDllDirectory failed for C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/pg-1.2.3/lib/x64-mingw32`が発生した時の解決方法
#はじめに
Railsで簡単なsnsアプリを作成している際に以下の問題が発生して1日沼にはまったのでそれの過程と、同じようなことが起きても忘れないよう記録として残しておきます。
同じ問題に直面した方々の役に立てれば幸いです。# 前提・使用環境
・Windows 10
・Ruby 3.0.2
・Rails 6.1.4.1
・Postgresql 12.8#起きた問題
`rails s`を実行した際に
`Gem Load Error is: AddDllDirectory failed for C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/pg-1.2.3/lib/x64-mingw32`
というエラーが発生。エラーは以下の通り。“`terminal:コマンドプロンプト
C:/Ruby30-x64/lib/ruby/3.0.0/bundler/runtime.rb:69:in `rescue in block (2 levels) in require’: There was an error wh
【Rails】いいね/コメント/フォロー/DMの通知機能
#はじめに
通知機能の復習のため残しておきます。#手順
###前提
いいね/コメント/フォロー/DM機能はそれぞれ作成済みとします。今回は、
– post(投稿)に対するいいね、コメント
– user同士のフォロー
– フォローユーザー同士であればdm可能という条件で機能を作成しています。
###やったこと
まず、通知の流れとして、
1.いいね/コメント/フォロー/DMのcreate時に、独自のメソッドで通知を作成
2.独自のメソッドが定義されているモデルへ行き、指定された処理を行ういいね、コメント、フォロー、DMの順で記します。
###いいね通知
“`ruby:favorite_controller.rb
@post = Post.find(params[:post_id]) #いいねをする投稿を探す
favorite = current_user.favorites.new(post_id: @post.id) #いいねを作成
favorite.save
@post.create_notification_favorite!(current_user)
lメソッドを用いた際のエラー解決:translation missing[Rails, I18n]
Railsの開発を進める中で、lメソッドを用いた際に、以下のようなエラーが発生したので、その原因と解決について記載したいと思います。
ちなみにI18nやlメソッドの詳しい利用方法に関しては、参考URLをご覧ください。![スクリーンショット 2021-09-22 22.33.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779676/4b8e9121-a6cb-50f2-a0e0-3ea011a18388.png)
## 結論 ≒ 原因
このエラーの原因はlメソッドの引数である、`@user.created_at`のクラスが、`ActiveSupport::TimeWithZone`であるからです。
I18nを用いる場合、lメソッドを用いた際には、よしなに日本語化してくれます。(application.rbなどを正しく設定できていれば)
しかしlメソッドの引数を翻訳するルールが、今回のエラーに大きく関係しているおり、
lメソッドを用いた場合、**Dateクラスのインスタンス**は**`
[Ruby] AtCoder過去問 B – Coins
##はじめに
AtCoder過去問をrubyで解いてみました。
よろしくお願いします。問題はこちらから確認してください↓
https://atcoder.jp/contests/abc087/tasks/abc087_b
##B – Coins
まずは入力を受け取ります。
改行されているのでreadlinesを使って受け取ります。“`ruby
a, b, c, x = readlines.map(&:to_i)
“`繰り返し文を使うので変数countを用意して0を代入しておきます。
今回のポイントは繰り返し文をネストしていくということです。今回は先に回答を記述します。↓
“`ruby
a, b, c, x = readlines.map(&:to_i)count = 0
(0..a).each do |i|
(0..b).each do |j|
(0..c).each do |k|
if i * 500 + j * 100 + k * 50 == x
count += 1
end
end
【Rails】マイグレーションでDATE型のデフォルトを現在日時にする
レコードが作成された日時をデフォルトにカラムが作成されるようにしたい。
DATETIME型で現在日時をデフォルトに入力する方法は多々見つかったものの、DATE型については情報があまり見つからなかったのでメモする。# DATE型で現在の日時をデフォルトにする
#### migration
“`
t.date :date, null: false, default: -> { ‘(CURRENT_DATE)’ }
“`
※`()`を忘れずに!!#### 確認
“`
mysql> show columns from テーブル名 like “date”;
+———+——+——+—–+——————+——————-+
| Field | Type | Null | Key | Default | Extra |
+———+——+——+—–+——————+——————-+
| d
Ruby + Seleniumでweb上のファイルをダウンロードする(Windows)
## きっかけ
引っ越しの準備や掃除の時など、あまり脳を使わない作業の際は耳が寂しくなります。
いつもだったら好きな音楽を聞きながら作業をしていました。
しかし、最近会社のチームメンバーから「技術系のポッドキャスト聞きながらやるのもオススメですよ」と、いいアドバイスをもらいました。
> いかなる時でも勉強しろという圧そこでオススメされたのが[fukabori.fm](https://fukabori.fm/)でした。
なんと都合のよいことに、各回のポッドキャストをmp3でダウンロードもできます。
これなら家での作業中だけでなく、散歩中など外にいるときにもギガを消費せずにポッドキャストを楽しむことができます。ただこのポッドキャストは2021/09時点で57回もやっています。
それをチマチマと1回ずつDLするのはめんどくさい。
ということで、お手軽に書けるRubyでまとめてDLする用のツールを作ることにしました。## 準備
趣味用のMacとかがないのでWindowsでやります。
ということでRuby入れるところからやります。### Ruby導入
1. RubyInstal
【rails】 存在しないデータにアクセスした時の例外処理
# レコードに存在しないデータにアクセスした
作成したコントローラーに
“`profile_controller.rb
class ProfilesController < ApplicationController def show @profile = Profile.find(params[:id]) end end ``` とだけ書いて適切な例外処理を書いていない場合、存在しないデータのURLにアクセスしようとすると ![スクリーンショット 2021-09-23 14.06.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1067124/0184b12f-bfba-fd95-8d5e-f7de0e42c37d.png) ActiveRecord::RecordNotFoundというエラーが出てしまいます。 このようにレコードにデータが存在しない場合の例外処理を書いて行きます。 # rescueを用いた例外処理 `rescue`を使うと、エラーが発生した場合次に行う
Rails 7 をちょこっと試す(さらば、Webpacker 編)
## はじめに
[Rails 7.0 Alpha 1](https://weblog.rubyonrails.org/2021/9/15/Rails-7-0-alpha-1-released/) がリリースされたということで、フロントエンド周りがどうなっているのか、プロジェクトを作ったときどうなるのか、ほんのちょっとだけ、調べてみました。
今回、使ったバージョンは、`gem install rails -v 7.0.0.alpha2 –pre` でインストールした[Rails -v 7.0.0 alpha 2](https://github.com/rails/rails/tree/v7.0.0.alpha2) です(2021/09/23執筆時点でリリースのアナウンスはまだ?)。
“`
$ rails -v
Rails 7.0.0.alpha2
“`## フロントエンド関連のオプションなしで rails new する
フロントエンド関連のオプションなしで、 `rails new` してみます。
“`shell
rails new . –database post