- 0.1. Rails6.2版 Relation配列指定でORクエリーを作る拡張
- 0.2. belongs_toをbelong_toと書いていたこと
- 0.3. 【Ruby on Rails】時間表示に関する記事いつも検索するからまとめてみた
- 0.4. ログイン前にトップページを表示させる方法
- 0.5. resourceとresourcesの違いについて
- 0.6. 【Rails】エラーメッセージ表示
- 0.7. rails g devise User を実行の際のエラーの話
- 0.8. LINE Messaging APIを使ってみる
- 0.9. flashについて
- 0.10. Active Jobについて知る
- 0.11. Ruby メソッドについて 引数や戻り値など
- 0.12. [Ruby] sortメソッド
- 0.13. 制作状況
- 1.
- 2.
Rails6.2版 Relation配列指定でORクエリーを作る拡張
# 目的
Railsデフォルトのorだと、何らかの動的な仕様の都合でRelation条件配列として保持している場合、ORを適用するのが大変
“`ruby
first_condition = or_conditions.shift
or_conditions.inject(first_scope) do |merged_scope, scope|
merged_scope.or(scope)
end
“`# 理想
このような形でサクッとORクエリーを作りたい
“`ruby
User.where.or(*or_conditions)
“`# 実装
[Rails5版 OR クエリ構築するマン](https://qiita.com/ighrs/items/86ba018d74514e1196a3) のRails6.2版(merge! → and!)
Rails6.2からmergeが厳密になり、統合方法の指定が必要になり汎用拡張には使えなくなった、そのため条件の追加である and! を使ってRelationにOR条件を追加する
“`ruby
# initial
belongs_toをbelong_toと書いていたこと
# belongs_toをbelong_toと書いて、作業が止まってしまった。
かなり初歩的なミスですが、学習中にbelongs_toをbelong_toと書いて、この間違いを探し出せず作業が止まってしまいました。“`ruby:ruby
belong_to #belongsの s が抜けており、このままだとエラーが出ます。
“`“`ruby:ruby
belongs_to #なので、このように忘れずにbelongsと書きます。
“`
# さいごに
このミスは、「記述ミスが一つでもあると動かなくなる。」ということが改めて分かったことでもあります。この記事は自身のミスに常に目を光らせておくという戒めとして書きました。今後は自分のミスにいち早く気づけるようにしていきたいです。
【Ruby on Rails】時間表示に関する記事いつも検索するからまとめてみた
#対象者
* 時間の表示に関して調べている方
#目的
* 時間表示の方法を1つの記事にまとめて整頓する
#実際の手順と実例
###1.タイムゾーンタイムゾーンを日本時間にする方法を下記の記事を参考にさせて頂きました。
https://qiita.com/katsutakashima/items/1453ed0c97a818ddd731
““config/application.rb
module App
class Application < Rails::Application # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. config.time_zo
ログイン前にトップページを表示させる方法
# 内容
アプリを作成するにあたり、ログインする前でもトップページが表示されるように設定しました。
# 解決法deviceを使用してログイン機能をつけた場合、
“`application_controller.rb
before_action :authenticate_user!
“`を記述することで全てのコントローラーでアクションが動く前にログインしているかしていないかを判断され、ログインしていなければログインページにリダイレクトされるようになります。
“`routes.rb
root “tops#index”
“`
この状態では、root_pathにトップページを指定してもログインページに飛ばされてしまいます。どうにかしてtopsコントローラーでは before_action :authenticate_user! を無効化したいですね。
そんな時は、skip_before_action を使います。“`tops_controller.rb
class TopsController < ApplicationController skip_bef
resourceとresourcesの違いについて
# はじめに
本記事では、resourceとresourcesの違いについて記述します。# resources
`resources`とは、
7つのアクションへのルーティングを自動生成するメソッドです。resourcesの引数に、:itemsなどという+シンボルで指定すると/usersのパスに対応するルーティングが生成されます。
“`
% rails routesGET /items(.:format) items#index
POST /items(.:format) items#create
GET /items/new(.:format) items#new
GET /items/:id/edit(.:format) items#edit
GET /items/:id(.:format) items#show
PATCH
【Rails】エラーメッセージ表示
# 目標
* エラーメッセージを表示させる
![スクリーンショット 2021-08-29 20.36.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927584/7393e52e-4229-c9c5-2c43-0cf10cc95c3f.png)* ユーザーの登録や投稿がなんで失敗したか知らせてくれるメッセージ
# 実装
エラーメッセージのファイル作成“`erb:app/views/layouts/_error_messeages.html.erb
<% if model.errors.any? %><% model.errors.full_messages.each do |message| %>
- <%= message %>
<% end %>
rails g devise User を実行の際のエラーの話
## 背景
rails g devise User を実行の際、以下のエラーが発生“`
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:PG::DuplicateColumn: ERROR: column “email” of relation “users” already exists
“`エラー文を見ると、どうやら**usersテーブルが重複**しているようだ。
## 試した事
`rails db:migrate:reset`
しかし、“`
rails aborted!
ActiveRecord::NoEnvironmentInSchemaError:Environment data not found in the schema. To resolve this issue, run:
bin/rails db:environment
LINE Messaging APIを使ってみる
## 概要
LINEのMessaging APIを使ってみる。
Railsでサーバー立ち上げて、実際にWebhookでどんな値が連携されるのか見ていきます。
(公式にあるのかもだけど見当たらなかったので)
ただ、Messaging APIの動きを見たいだけなので環境とかは適当に作ります。
誰かの役に立てば嬉しいです。## RailsのDockerイメージを作る
以下をまるまる真似してDockerでRailsが動くところまでやった。
– [DockerでRuby on Railsの環境構築を行うためのステップ【Rails 6対応】
](https://qiita.com/kodai_0122/items/795438d738386c2c1966)と、言いたいところだったけど、postgressのイメージバージョンの影響で動かないところがあった。
以下の対応でとりあえず回避した。
– [PostgresのDockerImageに変更があって起動ができなくなった話
](https://qiita.com/tomopict/items/23cc4332781bb28d2973)flashについて
# なぜ書くのか?
flashで表示すべきか?htmlで表示するべきか?を判断するときに、それぞれの技術の性質や役割を理解していないために、どちらを使えば良いのかを判断ができなかった。またそれらの技術の特徴を理解する以前に、基本的なこと(ブラウザのリクエスト、レスポンス、セッション(Cookie))についての理解が曖昧なために、どれだけ説明をよんでもちゃんと理解できなかった。そのため、本記事では研修で学んだ基礎的なことの復習をし、flashの技術の性質を理解するためにかく。# 基本的なことのおさらい
## HTTPとはHTTPとはWebサーバとWebブラウザの間で情報のやり取りをするための通信規則です。(プロトコル) 例えばgoogleでサイトを閲覧するときも、このプロトコルに則ってブラウザがサーバーにリクエストし、その結果サイトを閲覧することができている。
HTTPの特徴として、常にブラウザ側からサーバーをよびだし、1つの要求(リクエスト)には1つの応答(レスポンス)を返すこと。そして、以前に何を要求したかで応答が変わることなく、同じ条件ならば、ある要求に対する応答は常に同
Active Jobについて知る
## なぜ書くのか?
ユーザー登録時にslackに通知する機能を実装した際に、他の実装を真似て`ApplicationJob`を継承した。実装自体はできたが、`Active Job`の役割は非同期処理をするくらいの認識で、その仕組みについてしらないことだらけ。なので、Railsガイドに参考に分からない単語を調べたり、実際に実装してみて確かめながら理解を深めていくことにする。### Active Jobの目的
>Active Jobの主要な目的は、あらゆるRailsアプリケーションにジョブ管理インフラを配置することです。これにより、Delayed JobとResqueなどのように、さまざまなジョブ実行機能のAPIの違いを気にせずにジョブフレームワーク機能やその他のgemを搭載することができるようになります。バックエンドでのキューイング作業では、操作方法以外のことを気にせずに済みます。さらに、ジョブ管理フレームワークを切り替える際にジョブを書き直さずに済みます。[rails](https://railsguides.jp/active_job_basics.html#active-
Ruby メソッドについて 引数や戻り値など
#メソッドとは
メソッドとは***何の処理をしているかをわかりやすくまとめた、かたまり***のことです。⚫︎例えば
“`rb
def sports
puts “野球”
puts “サッカー”
puts “バスケ”
endsports
“`
みたいに***defとendで囲みます。***defの後にsportsと書いてあるので
sportsのことが書いてあるのだなとわかりますよね。これでsportsメソッドとなります。
その後def endの間に書くだけだと何も出力されないのでsportsとdefとendの間以外に
書くとsportsの中が出力されます。spotrsを10回書くとspotrsの中が10回出力されます。#変数、戻り値、返り値、引数を使うとどうなるか。
例えば平均点を求めるとします。“`
def average(a+b+c) #変数
(a+b+c)/3 #戻り値 #返り値end
average(4,5,3) #引数
average(6,5,7)“`
[Ruby] sortメソッド
##はじめに
今回はsortメソッドという配列の順番を並び替えられるメソッドを紹介します。##sortメソッド
配列に対して使います。配列に対してsortメソッドを使うと中身を昇順に並び替えてくれます。
“`ruby
array = [1, 5, 3, 2, 4]
array.sort
=> [1, 2, 3, 4, 5]
“`またreverseメソッドを組み合わせれば降順にできます。
“`ruby
array.sort.reverse
=> [5, 4, 3, 2, 1]
“`文字列にも使えます。
“`ruby
array = [“b”, “a”, “d”, “f”, “e”, “c”]
array.sort
=> [“a”, “b”, “c”, “d”, “e”, “f”]
“`“`sort!“` とすることで破壊的に使用することも可能です。
制作状況
“`model/order.rb
class Order < ApplicationRecord : has_many :ordered_items has_many :items, through: :ordered_items enum status: {"入金待ち":0,"入金確認":1, "製作中":2, "発送準備中":3, "発送済み":4} : end ``` ```model/ordered_item.rb class OrderedItem < ApplicationRecord belongs_to :order belongs_to :item enum making_status: {"製作不可":0,"製作待ち":1,"製作中":2,"製作終了":3} end ```“`ruby:orders.controller.rb
class Admin::OrdersController < ApplicationController【Ruby on Rails】Rate.jsを使ったときに星が増えるバグの解消法(jQuery)
#対象者
* レビュー評価を実装している方
* 星が増える不具合を実装している方![スクリーンショット 2021-08-29 7.33.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/c2c3092d-870d-e1b9-087e-2120ef2c21b6.png)
#目的
* 星が増える不具合を解消して、星を5個で収める
#実際の手順と実例
###1.結論(解決策)**scriptタグに$(”).empty();を追加すればOK!**
下記例です
div.rateの部分は人によって違うと思います。“`