- 1. 【Ruby on Rails】whereメソッドを使って投稿内容の絞り込み表示をしよう
- 2. ログイン用のgem,deviseの導入について
- 3. 【Rails】ancestryを用いてエリアの登録(多階層、親-子)を行う
- 4. rbenvを利用してのrubyのインストールに失敗したときの対処 m1 mac macOS 11.6
- 5. ハッシュの基礎!
- 6. 【Ruby】配列(数値)を大小で並び替えて◯番目を抽出する
- 7. 【Ruby】ハッシュの中のハッシュの値を取り出す方法
- 8. [Ruby] AtCoder過去問 B – 美しい文字列
- 9. 【Ruby on Rails】本番環境でデータベースをリセットする方法
- 10. 【Rails】エラーメッセージを日本語化する
- 11. Ruby 「nilの場合に○○を行わない」【イディオム】
- 12. Rubyのハッシュ関連のメソッドをまとめ
- 13. Railsチュートリアル 1.4.3 Push時のエラー解決方法
- 14. Node Sass does not yet support your current environment: OS X 64-bit with Unsupported runtime (93)
- 15. railsアプリ作成の忘却録
- 16. Railsを使ったクイズアプリで問題を1問ずつ表示する方法
- 17. Railsで作るクイズアプリのテーブル設計
- 18. [Ruby] AtCoder過去問 B – Foods Loved by Everyone
- 19. Railsでキーワード+ ラジオボタンを使った検索方法を実装する
- 20. Rubyの「宇宙船演算子」を再定義して AtCoder ABC219C を解く
【Ruby on Rails】whereメソッドを使って投稿内容の絞り込み表示をしよう
今回は投稿内容を絞り込みで表示してみましょう
##目次
**1.前提**
**2.whereメソッドについて**
**3.コントローラー記述**
**4.ビュー記述**
**5.ルート記述**###1.前提
今回は既に投稿と一覧ができる状態であることとします。
例としては下記のような状態であるとします。“`ruby:burgers_controller.rb
class BurgersController < ApplicationController def index @burgers = Burger.all end def new @burger = Burger.new end def create burger = Burger.new(burger_params) if burger.save redirect_to :action => “index”
else
red
ログイン用のgem,deviseの導入について
# Deviseの導入の仕方
– Gemfileに以下を追記し、インストール
“`gemfile
gem ‘devise’
“`
“`zsh
$ bin/bundle install
“`– deviseの初期設定と設定ファイルを以下コマンドにて作成
“`zsh
practice_app % bin/rails g devise:install
Running via Spring preloader in process 27150
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================Depending on your application’s configuration some manual setup may be required:
1. Ensure you have
【Rails】ancestryを用いてエリアの登録(多階層、親-子)を行う
#はじめに
ancestryを用いてエリアの登録(親、子)を行ったので、まとめておきます。
#手順
1. Gemfileに記述する
“`ruby:Gemfile
gem ‘ancestry’
“`
“`ruby:ターミナル
$ bundle install
“`2.モデルの作成
“`ruby:ターミナル
rails g model Region name:string ancestry:string
“`作成したマイグレーションファイルを開き、nameにnull: falseを指定する
“`ruby:ターミナル
rails db:migrate
“`3.モデルの記述
“`ruby:region.rb
has_ancestry
“`4.seedの作成
“`ruby:db/seeds.rb
#親のレコードを作成
hokkaido, tohoku, kanto, chubu, kinki, chugoku, shikoku, kyushu = Region.create(
[
{ name: ‘北海道地方’ },
{
rbenvを利用してのrubyのインストールに失敗したときの対処 m1 mac macOS 11.6
#書いた理由
3日間くらいずっと詰まっていたのが解決したので、
同じ事象が起きている人に届けばと思い、以下に記載します。#起こったこと
`rbenv install 3.0.2`
を実行したら以下のエラーメッセージでコケた
“`
BUILD FAILED (macOS 11.6 using ruby-build 20210925)In spect or clean up the working tree at/var/folders/62/ptdcgtz16zz093mpzzwmj_8w0000gn/T/ruby-build.20210928220009.63146.rhDrPV
Results logged to /var/folders/62/ptdcgtz16zz093mpzzwmj_8w0000gn/T/ruby-build.20210928220009.63146.log
“`#解決したこと
homebrewの再インストール#参考にしたところ
Installation issues with Arm Mac (M1 Chip)
https://gi
ハッシュの基礎!
今回はRubyの問題です!
これを解いて理解して行こうと思います!
下記が問題です!
“`php
puts hash.keys
puts hash.values
“`上記のメソッドを実行した時に!
“`
one
two
three
1
2
3
“`とターミナルに表示されるような変数hashを、作成するためのコードをシンボルを使って記述しましょう!
#①.解答
“`php
hash = { one: 1, two: 2, three: 3 }
“`上記の記述が答えとなります!
では、これを詳しく解説します!
#②.解説
シンボルを使用したキーの記述方法は、キーの後にコロン:をつけて定義します!
下記の通りです!
“`php
hash = { キー: 値}
“`ハッシュをシンボルで記述すると、コード上では文字列のように見えていますが、
内部的には数値として処理されます!
数値として扱われるので、処理速度が速くなる事と、文字列としての役割も果たします!
それによって、ハッシュのキーにはシンボルを用いることが多いです!
ハッ
【Ruby】配列(数値)を大小で並び替えて◯番目を抽出する
# やったこと
“`ruby
i = [4, 18, 25, 20, 9, 13] #変数に配列を代入
p = i.sort.reverse #.sortはデフォルトで昇順(小→大)のため、.reverseで降順(大→小)に変更
puts p[2] #3番目に大きいものを表示
“`.reverseで降順にすることで、
配列の数に関わらず、大きいものから3番目が抽出できます。
【Ruby】ハッシュの中のハッシュの値を取り出す方法
下記のようなハッシュがあった際、punch_inの中のdateの値を取り出したい
“`
hash = {
Fri, 01 Jan 2021=>
{:punch_in=>
id: 2314,
date: Fri, 01 Jan 2021,
:punch_out=>
id: 2315,
date: Fri, 01 Jan 2021,
}
}
“`##やり方
1. ハッシュからvaluesだけを取り出し配列の形にする“`
arr = hash.values#=>
[{:punch_in=>
id: 2314,
date: Fri, 01 Jan 2021,
:punch_out=>
id: 2315,
date: Fri, 01 Jan 2021
}]
“`2. 配列から取り出す
“`
puts arr[0][:punch_in][:date]#=> Fri, 01 Jan 2021
“`##参考
https://qiita.com/komiso/ite
[Ruby] AtCoder過去問 B – 美しい文字列
##はじめに
AtCoder過去問B問題をRubyで解いてみました。
よろしくお願いします。問題はこちらから確認してください↓
https://atcoder.jp/contests/abc044/tasks/abc044_b
##B – 美しい文字列
まずは入力を受け取ります。“`ruby
w = gets.chomp.chars
“`一文字ずつ分けて、配列として受け取ります。
入力例1でいえばこのように受け取れているはずです↓
“`[“a”, “b”, “a”, “c”, “c”, “a”, “b”, “a”]“`countメソッドでそれぞれの文字が配列wの中にいくつあるか調べ、それが偶数個なのかどうかeven?メソッドで調べます。
さらに、全ての種類の文字が偶数個ないといけないので、all?メソッドで上記の条件が全て真の時にtrueを返すようにします。trueであればYesを出力させ、falseならNoを出力させます。
配列wで使われている文字の種類は“`w.uniq“`で表現します。
“`ruby
w = gets.chomp.chars
【Ruby on Rails】本番環境でデータベースをリセットする方法
#対象
* 本番環境でのデータのリセットに悩まされている方
#目的
* 本番環境でデータをリセットして新たにデータをセットする準備をする
#実際の手順と実例
###1.前提* Ruby on Railsを使ったアプリ開発
* AWSのEC2を使用してサーバー構築###2.本番環境でのデータベースリセット
まずは開発環境(cloud9から)EC2へSSHでログインし、自分のアプリケーションのディレクトリに移動します。
““
$ ssh -i ~/.ssh/[キー名][ユーザー名]@[パブリックIPアドレス]
$ cd [アプリケーション名]
““
※ [ ] を入力する必要はありません。下記のコマンドを打てばOKです。
““
RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rails db:drop
““これだけでは、エラーが発生してしまいますので、忘れずにデータベースの内容を反映させます。
““
rails db:create RAILS_
【Rails】エラーメッセージを日本語化する
本記事では、入力フォームが空のまま送信された場合に表示されるエラーメッセージを、
英語から日本語に変換する方法をアウトプットしていきます。# 前提条件
・Rubyバージョン2.6.5
・Railsバージョン6.0.0
・エラーメッセージを表示したいページは作成済みとします。# この記事の構成
①エラーメッセージのビュー作成
②部分テンプレートの呼び出し設定
③日本語の言語設定とGemの導入
④`devise.ja.yml`の作成
⑤`ja.yml`の作成
⑥バリデーションでさらに詳細なエラーメッセージを設定#①エラーメッセージのビュー作成
まずはエラーメッセージを生成するビューを作ります。
どのモデルのバリデーションにも対応できるように、if文に`model.errors.any?`を記述しています。“`app/views/layouts/_error_messages.html.erb
<% if model.errors.any? %><% model.errors.full_
Ruby 「nilの場合に○○を行わない」【イディオム】
## 改良前:if文を使って「nilの場合は行わない」
サンプルコードは、文字列長を求めるメソッドを作成しました。
こんなメソッドを普通には作ることは無いでしょうが、サンプルなので分かりやすさ重視です。__サンプルコード__
“`rb:length.rb
def get_length(text)
if text # nil.sizeだとエラーになってしまうため回避。
text.size
end
endputs get_length(‘abcde’) # > 5
puts get_length(‘あいうえおかきくけこ’) # > 10
puts get_length(nil) # > nil
“`## 改良後:safe navigation operator(&.)を利用する
__safe navigation operator__は`オブジェクト&.メソッド`でメソッドを呼び出すと、「オブジェクトがnilの時nilを返す」という演算子です。
これを使って先ほどのコードを改良します。“`rb:length.rb
def get_lRubyのハッシュ関連のメソッドをまとめ
## keys ハッシュのキーを配列で返す
__サンプルコード__
“`rb:hash.rb
country_code = { japan: ‘JP’, australia: ‘AU’, canada: ‘CA’ }
puts “keys: #{country_code.keys}”
“`__実行結果__
“`
keys: [:japan, :australia, :canada]
“`## values ハッシュの値を配列で返す
__サンプルコード__
“`rb:hash.rb
country_code = { japan: ‘JP’, australia: ‘AU’, canada: ‘CA’ }
puts “values: #{country_code.values}”
“`__実行結果__
“`
values: [“JP”, “AU”, “CA”]
“`## has_key?, key?, include?, member?
__サンプルコード__
“`rb:hash.rb
country_code = { japan: ‘JPRailsチュートリアル 1.4.3 Push時のエラー解決方法
Railsチュートリアル第1章の1.4.3で、Githubへのpush時にエラーが出るようになっているので、
解決方法のメモとなります。# エラー内容
チュートリアルの1.4.3で下記コマンドを実行するとエラーが発生する。“`sh
$ git push -u origin master
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
“`調べてみるとGitHubが2021年8月13日にパスワード認証を廃止したことが原因のようです。
https://news.mynavi.jp/article/20201222-1604003/Ra
Node Sass does not yet support your current environment: OS X 64-bit with Unsupported runtime (93)
# Font Awesome 導入時のエラー
## 今回採用した導入手順
– 以下のパッケージをインストール“`zsh
yarn add @fortawesome/fontawesome-free
“`– app/javascript/packs/application.jsに追記
“`js
import ‘@fortawesome/fontawesome-free/js/all’;
“`– app/javascript/stylesheets/application.scssに追記
“`scss
@import ‘~@fortawesome/fontawesome-free/scss/fontawesome’;
“`ここまでしてrailsサーバ起動したらエラー、、、
## エラー文
“`zsh
Node Sass does not yet support your current environment: OS X 64-bit with Unsupported runtime (93)
“`– 結論から言うと、nodeのバー
railsアプリ作成の忘却録
##webアプリケーションの新規作成
“`
$rails new アプリ名(その後にオプションの指定)
“`“`
$rails new アプリ名 –datebase=postgrep –api
“`PostgreSQL
データベース(SQL)の1つ
オープンソース、データベースと関連付けた
丈夫さ、パフォーマンス性に特徴がある
インストール方法とか使い方の記述が豊富##データベーステーブルを作成した際のエラー
“`
$ bundle exec rails db:create
$ bundle exec rails db:migrate
“`
を記述したら“`
could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/tmp/.s.PGSQL.5432”?
Couldn’t create ‘scaffold_app_devRailsを使ったクイズアプリで問題を1問ずつ表示する方法
#前提
quizがquestionとアソシエーションの関係である。“`ruby
class Quiz < ApplicationRecord has_many :questions, dependent: :destroy end ``` ```ruby class Question < ApplicationRecord belongs_to :quiz end ``` 以下のように問題を1問ずつ回答したのちに結果を表示させるような実装をしたい方は、ぜひ参考にしてみてください。#実装方法
####nextメソッドを定義する“`ruby
class Question < ApplicationRecord belongs_to :quiz def next(quiz) quiz.questions.where(Railsで作るクイズアプリのテーブル設計
# 前提
– 問題の作成、回答ができる
– 回答の選択肢を増やせる上記のようなアプリを作りたい方は、ぜひ参考にしてみてください。
# 完成系
# テーブルの役割
####quizzesテーブル
作成者の情報と問題の大枠を管理する。####questionsテーブル
問題の内容を格納する。####choicesテーブル
選択肢の情報を格納する。
また、`correct_answer`を`boolean`で設定し、回答正誤を判定する。####challengersテーブル
回答者の情報を管理しています。
また、ランキング機能を作るために`score`カラムを追加。#解説
####NGパターン
クイズアプリのテーブル設計をする際パッと思いつくのは、こんな感じではないでしょうか?| question |
[Ruby] AtCoder過去問 B – Foods Loved by Everyone
##はじめに
AtCoder過去問のB問題をRubyで解いてみました。
よろしくお願いします。問題はこちらから確認してください。↓
https://atcoder.jp/contests/abc118/tasks/abc118_b
##B – Foods Loved by Everyone
はじめに入力を受け取ります。“`ruby
n, m = gets.split.map(&:to_i)
a = readlines(chomp: true).map{|line| line.split(‘ ‘).map(&:to_i)}
“`2行目は二次元配列で受け取っています。入力例1を例にすると
“`[[2, 1, 3], [3, 1, 2, 3], [2, 3, 2]]“`
といったように受け取ります。配列aの中のそれぞれの配列の先頭(インデックスで0番目)の数字は好きな食べ物の数を表しているだけです。好きな食べ物を表しているわけではないので、邪魔になります。消しましょう。
“`ruby
n, m = gets.split.map(&:to_i)
a = readRailsでキーワード+ ラジオボタンを使った検索方法を実装する
#1. はじめに
検索機能を実装する課題があったのでまとめます。
調べたところransackというgemを使っても検索機能を実装できるようですが、課題の趣旨から外れてしまうため、今回はgemなしで実装しました。
#2. Railsで検索機能を実装する[View]
**①まずroutesを追加する**
コントローラーとモデルは既に作成済みを想定します。“`rb
get ‘search’, to: ‘XXX#search’
“`私の場合は“/search“というURLにsearchというcontrollerのアクションを対応させました。
**②Viewにform_withで値を設定する**
“`rb
<%= form_with(scope: :検索対象のモデル名, url: search_path, method: 'get') do |form| %>
・・・
・・・
<% end %>
“`
・“scope“にはmodel名を指定します。
・urlには“routes“で指定した“controller“のアクションを指定します。
・Rubyの「宇宙船演算子」を再定義して AtCoder ABC219C を解く
AtCoder の ABC219C の問題は以下のリンクから参照下さい。
https://atcoder.jp/contests/abc219/tasks/abc219_c
簡単にいうと、アルファベットの順番を替えた上で、複数の文字列を辞書順にソートして出力するという問題です。
じつはこれ、とても Ruby らしい簡潔な解法が存在するので、まずはそちらを説明します。
“`ruby:Ruby
x = gets.chomp
n = gets.to_i
strs = n.times.map { gets.chomp }puts strs.sort_by { _1.tr(x, “a-z”) }
“``x`は新しいアルファベットの順番、`strs`はソートすべき文字列の入った配列で、`sort_by`を使って、解いている部分は1行で書けています。かかる時間もかなり速いです。
#本題
さて、`Array#sort`は配列の中身が文字列の場合、暗黙にいわゆる「宇宙船演算子」、つまり`String#<=>`を使って辞書順にソートします。では、これを再定義してやれば、ただの`Ar
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた