- 1. 基本形
- 1.1. 【Rails】NameError: uninitialized constant Sidekiq::Loggingの解決方法【非同期処理】
- 1.2. Rakeタスクが、本当にWheneverを使ってcronで実行できているか試してみた。
- 1.3. いいね機能実装中にルートエラーmissing required keys: [:id]で時間が溶けた。
- 1.4. 【Rails】rails db が見づらいのでクライアントツールを使おう
- 1.5. マイグレーションファイルの基本
- 1.6. Ruby ハッシュ 基礎
- 1.7. Ubuntu20.04 LTSにnginx、Railsアプリケーションを配置する
- 1.8. 【Ruby】配列の最大値をとる
- 1.9. 検索機能(画像も含む)でローカル上は正常、heroku上ではエラー 解決策
- 1.10. Rails 6.1で追加される機能のピックアップ
- 1.11. update_attributesとupdate_attributes!の違い
- 1.12. エラー処理〜doesn’t have a default value〜
- 1.13. 【Ruby】Sidekiqが暴走したら!!!
- 1.14. 大学生がマッチングサービスを作ってみた #1
伝票オートカルクシステム
計画を人間的に解釈して実装するにはRubyのような高級言語がいいですね。
Excelの見積書をダウンロードして編集しアップロードすると合計値が得られるシステムです。https://github.com/JFLABO/denpyou_autocalc
コロナ特措法で特別な経済対策を行うといっても一体何が!?という感じだったので
みんながやりたそうなことをやろうとするといくらくらいか、その予算執行を認めるか
判断していく必要があり、多くの人が利用できるようにオープンソース化しました。
初期データ作成方法(Rails)
#seedファイルの書き方
“`ruby:db/seed.rb
User.create!(
[
{
name: “ゲストユーザー1”,
email: “guest1@example.com”
},
{
name: “ゲストユーザー2”,
email: “guest2@example.com”
}
]
)
“`“`
$ rails db:migrate:reset #データベースをリセット
$ rails db:seed #初期データ挿入$ rails db:reset
“`データベースのデータを削除した後
`rails db:seed`を実行して初期データの挿入できます。`rails c`で実際にデータがあるか確認します。
“`
$ rails cRunning via Spring preloader in process 17596
Loading development
お気に入り機能(非同期)
ポートフォリオの作成でお気に入り機能を非同期で実装したので、その箇所の記述についてアウトプットします。
モデル、コントローラー作成してアソシエーション記述した後の作業を書いていきます。### 動作環境
rails6.0.0
ruby 2.6.5
### jquery導入“`terminal
% yarn add jquery
“`“`config/webpack/environment.js
const { environment } = require(‘@rails/webpacker’)
// 以下追記
const webpack = require(‘webpack’)
environment.plugins.prepend(‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery/src/jquery’,
jQuery: ‘jquery/src/jquery’
})
)
// ここまで
module.exports = environment
“`“`appl
MacでBundle installでエラーが表示される
実行環境
—
macOS Big Sur
ruby 2.6.5やりたいこと
—
アプリの依存関係をローカルにインストールすることエラーの経緯
—
rubyアプリをHerokuにデプロイしたかったので、Herokuの公式チュートリアルで指示通り進めていたときに、このエラーが発生しました。
該当箇所は「アプリの依存関係を宣言する」。 ここまでで、`git clone`で公式の用意したサンプルアプリをローカルにインストールした上しています。
postgresqlの存在をしっかりローカルで確認した上で、今回の元凶 `bundle install`様が降臨されました。実際のエラー文
—
“`
takayamatoranosuke@ttmbp ~ % bundle install
Could not locate Gemfile
takayamatoranosuke@ttmbp ~ % cd dev
takayamatoranosuke@ttmbp dev % cd ruby-getting-started
takayamatoranosuke@ttmbp rub
Rubyにおける改行コードの削除について chomp, chomp!
# はじめに
プログラムの外部からデータを入力する標準入力において、標準入力からデータを読み込む際に意識しなければならないのが**改行コード**です。
改行コードの削除について調べたので、備忘録としてまとめました。# 改行コードの概要と種類
改行コードとは、改行を表す**制御文字**のこと。
テキストファイルは、文字コードが格納されたファイルですが、1行の終わりの位置に必ず改行コードが入っています。試しに、ターミナルのirbモードで標準入力を実行すると、以下のように受け取った文字データには改行コード(\n)が含まれています。
“`言語:ターミナル
irb(main):001:0> line = gets
おはよう
=> “おはよう\n”
“`改行コードはOSによって次のように異なります。
* \n:Unix系OS全般
* \r\n:Windows系OS
* \r:古いMac OS(9以前)# 改行コードの削除
rubyで改行コードを削除する場合、以下2つのメソッドが使えます。## chompメソッド
`文字列.chomp`
chompは、対象の文字列の末尾か
【Rails】ControllerTestの基本形について
railsではテスト駆動開発という、「テスト→実装」でアプリケーションを手法があります。
今回はそのテスト駆動開発のテストの基本形を書いてみました。基本形
“`ruby:controller_test
require ‘test_helper’class StaticPagesControllerTest < ActionDispatch::IntegrationTest test "should get home" do #homeに対してgetリクエストを送る get static_pages_home_url #リクエストに対して帰ってきた判定でテスト自体の成否を出す assert_response :success end end ``` 上記例では、ページ一つを表示させるリクエストに対して、そのレスポンスが正しく帰ってきているかを検証します。 このとき表示されたテンプレートの数を増やしてもいくのもありです。 これくらいざっくりでも、自動でテストコードが走るようになっているれば、リファクタリングする際
【Rails】NameError: uninitialized constant Sidekiq::Loggingの解決方法【非同期処理】
#はじめに
現場で使える Ruby on Rails 5速習実践ガイド
「Chapter 7-8 非同期処理や定期実行を行う」でタイトルのエラーが発生。
タスク管理アプリのタスクフォームからタスクを投稿した時に非同期処理が実行されるプログラムを記述するも想定通りいかず、、、
#環境
Ruby 2.6.6
Rails 6.1.3
sidekiq 6.0.4
#結論
sidekiqのバージョンが新し過ぎたせいでコマンドがうまく実行されなかった模様。
なので、以下をgemfileに記載。““ruby:gemfile
gem ‘sidekiq’, ‘~> 5.0’
““記入後bundleからのrails sの後にredis-serverとbundle exec sidekiqを実行。
タスク投稿後、無事出力された。““ruby
2021-03-19T15:05:18.659Z 10221 TID-ovjc2wymp SampleJob JID-82b7b80cec1cd3c40b4592ec INFO: start
2021-03-19T15:05:18.845Z 10
Rakeタスクが、本当にWheneverを使ってcronで実行できているか試してみた。
Rakeタスクを作成して、Wheneverでcronの実行スケジュールを定義したけど・・・これって本当に実行できてるの?と思ったので、簡単なタスクとスケジュールを作って実行しログを確認してみました。
Rakeタスクを編集
—“`publish.rake
namespace :publish do
desc “指定した時刻からの経過時間を表示”
task test: :environment do
time_now = Time.current
time = Time.local(2021,3,19,21,00,00)
puts “#{((time_now – time)/60).to_i}分が経過しました”
end
end
“`
今回はお試しなのでとりあえずシンプルな検証です。とはいえただ文字を出力させるだけじゃ味気ないので、ある時点の時刻 Time.local(2021,3,19,21,00,00) から、現在の時刻 Time.current までの経過時間を出力させる処理を記述します。時刻の差分は秒数で出力されるので、秒数を分数に
いいね機能実装中にルートエラーmissing required keys: [:id]で時間が溶けた。
#いいね機能実装中にmissing required keys: [:id]がでた。
![スクリーンショット 2021-03-19 19.10.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933066/dc59cbc8-1c02-ab2f-d9f9-ca441ff2735c.png)
上記のようにいいね機能(recommend)を実装しrecommendボタンを押すと中間テーブルにuser_idとmicropost_idが保存され、redirect_backされて、下記のようにrecommend件数が増えるはずが
![スクリーンショット 2021-03-19 21.16.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933066/a63cee47-d636-b950-5800-2a2e58437248.png)上記のようにはならず下記のようなエラーが発生。
![スクリーンショット 202
【Rails】rails db が見づらいのでクライアントツールを使おう
### 環境
MacOS
Rails 6.1.3
SQLite version 3.28.0# Problem
railsを使っていてDBの中身を見たくなったり、SQLを流したいことは多々あります。
そんなとき使うのが「rails db(console)」コマンドですね。でもこれ、とっても見づらくありませんか?“`sql
sqlite> SELECT * FROM relationships LIMIT 1;
1|3|1|2021-03-04 08:19:13.390480|2021-03-04 08:19:13.390480
“`改行文字が含まれていればそのまま改行されて見えますし、ヘッダもありません。
SQLiteに慣れていないのもありますが、やはりこれでは可読性が高いとは言えません。
なんとかSQLiteのオプションで見やすくならないかと試行錯誤してみました。# Try
“`sql
— ヘッダを表示
sqlite> .headers ON
sqlite> SELECT * FROM relationships LIMIT 1;
id|user_id|fo
マイグレーションファイルの基本
## マイグレーションとは?
マイグレーション(migration)とは辞書では「移行」の意味を持つ
ざっくりいうと「SQLなしでデータベースにテーブルを作成する機能」のこと。## 作り方
ターミナルでコマンドを打つと作成できる“`:ターミナル
# モデルと同時に生成
$ rails g model User
“`
モデルと同時に生成される複数ファイルのうちのひとつにマイグレーションが入っている。“`:ターミナル
# 単体で生成
$rails g migration create_user name:string email:string gender:integer
“`
マイグレーションのみを生成する際には、ファイル名の後ろに[カラム名:データ型]を指定することで生成前に
テーブルを指定しておくことが可能。## 基本の形
“`Ruby:db/migrate/[timestamp]_ファイル名.rbclass CreateUsers < ActiveRecord::Migration[6.1] def change create_tab
Ruby ハッシュ 基礎
# ハッシュ 基礎知識
ハッシュとは、
「データ」とそれに対応する「名前」のセットを要素として持つ値のこと。
複数のデータを持つことのできる値という点は、配列と同じである。データをバリュー、それに対応する名前をキーと呼ぶ。
ハッシュは順番ではなく、キーで管理する。
キーとバリューで管理する方式をキーバリューストアと呼ぶ。# キーバリューストア
“`rb:キーバリューストア例
Key: User1 ⇢ Value: Hoge
Key: User2 ⇢ Value: Fuga
“`ハッシュを用いれば、別々の意味を持つ値を1つにまとめられるため、値同士の関連を示すことができる。
# ハッシュ生成方法
ハッシュは、波括弧{}を使って生成する。“`rb:ハッシュの宣言
変数 = {}
“`
ハッシュは、はじめから要素を持った上で生成できる。“`rb:=>を用いてキーとバリューをセットにして記述
変数 = { キー1 => バリュー1, キー2 => バリュー2, キー3 => バリュー3 }
“`“`rb:シンボルを用いてキーとバリューをセットにして記
Ubuntu20.04 LTSにnginx、Railsアプリケーションを配置する
### 環境
“`
Ubuntu20.04 LTS
git version 2.25.1
MySQL version 8.0.23
“`
### rbenvのインストール
“`bash:terminal
$ sudo apt update
$ sudo apt install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bashrc
$ ~/.rbenv/bin/rbenv init
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.bashrc
$ source ~/.bashrc
$ rbenv -v #インストールできたか
【Ruby】配列の最大値をとる
例えば
“`rb:.rb
numbers = [4,50,19,-12,0]
“`
この配列から最大値をとるとき“`rb:.rb
max = numbers[0]
numbers.each do |number|
max = number if number > max
end
puts max
# => 50
“`
みたいな面倒なことをしていたのですが、sortメソッドなるものを知ったので“`rb:.rb
puts numbers.sort[numbers.length-1]
# sortで配列を小さい順に並び替えて、最後の値を取得する
“`
とても楽になりました。
検索機能(画像も含む)でローカル上は正常、heroku上ではエラー 解決策
検索機能(画像含む)がある、簡単な投稿サイトポートフォリオを作成中に起きたエラー。
今回かなり時間を費やしてしまい備忘録のためと、他に困っている方などいましたらご参考までにして頂けたら幸いです!プログラミング学習始め日が浅いため、コード等ではもっと上手な記述の仕方がありました、合わせてご指摘も頂けましたら幸いです。
今回発程したエラーはローカル上では検索機能(画像含む)が正常に動いているが、
herokuでデプロイした際に検索ボタンを押すと、エラーになるといった内容。ransackのjemを導入済み。
始めに確認したことは、ターミナルでエラーログを確認。
`ターミナル`
“`
2021-03-19T05:26:08.790107+00:00 app[web.1]: [3211f911-070c-4c95-9858-435d1ef98f86] ActionView::Template::Error (Nil location provided. Can’t build URI.):
2021-03-19T05:26:08.790108+00:00 app[web.1]:
Rails 6.1で追加される機能のピックアップ
## はじめに
Rails 6.1で良さげな機能が追加されているのですが、[ここ](https://qiita.com/ryohashimoto/items/7caf905389ccb5d7d8fb)以外に日本語の情報がなかったので、[ここ](https://qiita.com/ryohashimoto/items/7caf905389ccb5d7d8fb)で紹介されている以外で良さそうな機能をピックアップして紹介させていただきたいと思います。
なお、ActionCable、ActionMailbox、ActiouText、ActiveStorageは自分の業務で使っていないので良い機能か判断できないため除いています。## Actionview
`config.action_view.image_loading`が追加されています。
“`ruby
config.action_view.image_loading = “lazy”
“`
と設定すると`image_tag`の`:loading`オプションのデフォルト値が`lazy`
となります。
今の業務ではサイト全体に画像の
update_attributesとupdate_attributes!の違い
#結論
どちらのメソッドもデータベースに更新する直前にvalidationを実行する。
validationに妥当性がなかった場合に・**update_attributes** falseを返す
・**update_attributes!** 例外処理を返す
という違いがある。
#例
入力必須であるnameカラムを持つUserモデルを例にすると
###update_attributes
“`
user.update_attributes(name: nil)
=> false
“`###update_attributes!
“`
user.update_attributes!(name: nil)
ActiveRecord::RecordInvalid: Validation failed: Name can’t be blank
“`それぞれ上記の処理をする。
エラー処理〜doesn’t have a default value〜
###こんなエラーが出ました。
![スクリーンショット 2021-03-19 16.06.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/782402/34b9be6d-9ccc-c345-5a90-e154287f7083.png)
このような文が出ていた時は、大抵マイグレーションファイルに問題がある。
**・必要のないカラムを作っていないか**
**・存在しないカラムに対してバリデーションをかけていないか**を確認する。
入力の必要のないカラムをつくっていて、かつバリデーションをかけていると、そんな入力のところないぞ!と怒られる。当然ですね。
**<ロールバック技>**
10こマイグレーションファイルがあったとして、4個前まで一気に戻りたい。
(一回のrails db:rollbackでは1つ前までしか戻れない)→ **rails db:rollback STEP=4**
このように記述すると4つ前まで一気にロールバックしてくれる。
以上。
【Ruby】Sidekiqが暴走したら!!!
“`rb
Sidekiq.❨╯°□°❩╯︵┻━┻
“`
大学生がマッチングサービスを作ってみた #1
はじめまして。大学生のKotaといいます。
今回は個人開発にて作成したマッチングサービスについて超簡単にですが、自分用にアウトプットしていきたいと思います。
これから何かポートフォリオを作ってみたいという方など少しは参考になるかもしれません。######軽く背景
昨年はコロナで大学の授業がすべてオンラインになり、友だち作りに悩む人が多くなりました。
自身も悩んだことがある経験から大学の1年生のために作ることにしました。友だちを作るためには何が必要かと考えると、共通点だと思っています。私は友だちは多くいる方ではないとは思いますが、全員と何かしらの共通点を持っていることが多かったです。
実際、今大学で一番仲の良い友だちも、学部が同じだったり、スマブラが好きだったり、野球が好きだったり、と多くの共通点を持っています。同じ大学の学生同士で、共通点が多い人と繋がれるようなサービスがあったら友だち作りの悩みが解消されるのではないかと思い、制作をはじめました。
制作にかかった期間としてはおよそ3ヶ月です。
制作前は、Progate→Railsチュートリアルくらいしかしていないので、優し