Ruby関連のことを調べてみた2021年09月04日

Ruby関連のことを調べてみた2021年09月04日

[ransack]複雑な検索機能の実装

# はじめに
本記事では、`ransack`を用いた複雑な検索機能について記述します。
以下の画像のようなものを作成します。

![ransack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1768158/071b4cfd-7b98-132e-e6d6-4094c3ad98f6.png)

・「名前など」のところには、店名やメニュー名などがキーワードで検索できるようにしました。
・「辛さ(からさ)」では、ActiveHashとしているものとなっています。
・「close」は関係ないので、無視です。

# コード
該当箇所記載します。
関係ないところは、`省略`します。

## コントローラー
`@q`や`@p`など記載方法は分かれますが、`[:q]`もあるので、
`@q`に統一しました。

`検索パラメーター`(検索する際に入力した内容)のキーを、
`:q`としており、`queryのイニシャル`のことです。

query=質問(by Google先生)

記述し終わったら`binding.pry`し

元記事を表示

[Ruby] shiftメソッド

##はじめに
shiftメソッドの紹介です。
プログラミング問題でsortメソッドと組み合わせると便利でした。

##Array#shift
配列に対して使用できます。
配列の先頭の要素を取り出してそれを返してくれます。そしてその配列から取り出した要素は削除されています。

どういうことかというと下記の例を見てください。

“`ruby
array = [1, 2, 3, 4, 5]
array.shift
=> 1
“`

このように先頭の数値を取り出してくれます。
配列の中を見て見ましょう。

“`ruby
p array
=> [2, 3, 4, 5]
“`

配列の中の先頭にあった1が消えています。

また引数を渡すこともできます。渡した数字の数だけ先頭から取り出して削除してくれます。

“`ruby
array = [1, 2, 3, 4, 5]
array.shift(3)
=> [1, 2, 3]

p array
=> [4, 5]
“`
ちなみに空の配列に対して使う時、引数を渡すのと、渡さない場合は結果が違うらしいです。

“`ruby
array =

元記事を表示

教員専用のコミュニティサイトを作ってみました。

# 概要

アプリ名: TESCO

教員専用のコミュニティサイトで、主に3つのことができます。
・ 教員特有の気付きなどを記事にできること
・ 教員同士で質問を解決できること
・ イベント(勉強会など)を作成できること

![スクリーンショット 2021-09-03 16.19.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1967492/f9be00ec-7815-2bce-0610-c109df68bd3c.png)

# 使用技術
– Ruby 2.7.2
– Ruby on Rails 6.1.4
– MySQL 8.0
– AWS S3
– Docker
– CircleCI CI/CD
– Rspec
– Google Maps API
– R

元記事を表示

【Rails】Your Ruby version is 3.0.2, but your Gemfile specified 2.7.2の対処法

症状

Gitから新しいPCにプロジェクトをpullした後、railsサーバーを起動しようとしたところ、下記のエラーが表示されてしまいました。
バージョンが違うと怒られているようです。

“`terminal:error
Your Ruby version is 3.0.2, but your Gemfile specified 2.7.2
“`

Gemfileに記述されているバージョンを確認したところ、下記でした。

“`ruby:Gemfile.rb
ruby ‘2.7.2’
“`

現在インストールしているバージョンを確認したところ、下記でした。
エラーメッセージ通りでした。

“`terminal:rubyバージョン
ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x64-mingw32]
“`

解決策

Gemfileに書かれているバージョンを現在のバージョンに変更し、bundle updateをすることで解決しました。
雑な方法ではありますが、Gemfileのバ

元記事を表示

【Rails】ActiveHashでcollection_selectしたのにプルダウンが表示されないエラー

この記事ではRails 6.0.0を使用しております。

当方、プログラミング初学者です。
Ruby on Railsにおいて、ActiveHashの学習中に発生したエラーについて
備忘録として残したいと思います。

結論から言うと、単なるスペルミスが原因のエラーでしたが、
エラー表示がパッとでてこなかった場合の、エラーの原因を探す1つの方法を記します。

ActiveHashの学習のために、簡易的な記事投稿アプリを作成しております。
記事の”ジャンル”をActiveHashで表示させるようにします。
ActiveHashの導入方法などは、他の記事を参照してもらうとして、
gem導入後、下記のようにモデル、コントローラー、ビューを作成しました。

“`app/models/genre.rb
class Genre < ActiveHash::Base self.date = [ { id: 1, name: '--' }, { id: 2, name: '経済' }, { id: 3, name: '政治' }, { id: 4, name: '地

元記事を表示

【Rails】StrongParameterの使用は必須ですか?

# 概要
StrongParameterはrails4から導入されたマスアサインメントを防ぐために導入された仕組みですが、使用が前提になっていると思っている方がいるようですが実際には必須ではありません。例えば、以下のようにStrongParameterからHashにして入力しても使うことができます。なぜこのように動作するかについてrailsのソースコードを見ながら説明します。

“`ruby
class Dog < ActiveRecord end params = ActionController::Parameters.new(name: 'tama', status:"sleepy") // new with strong parameter Dog.new(params.permit(:name, :status)) // new without strong parameter (hash) Dog.new(name: params[:name], status: params[:status]) // new without strong parameter (h

元記事を表示

Rails × Vue.jsでカルーセルを実装

https://ssense.github.io/vue-carousel/
カルーセルとはこんな感じ。

これを実装していく。
トップページのログインページにこれを表示させたいので、

#自作vueコンポーネントをerbに表示させる

“`erb

<%= image_tag 'coffee_gif.gif' ,class: "coffee-gif"%>

Von Voyage!

Coffee Passportとはあなたが出会ったコーヒーの記録を共有できるサービスです

生粋のキャンプ好きが、キャンプ場検索に特化したサービス【TO_CAMP】を開発&リリースしました。(Rails/Docker/CircleCI/Heroku)

##はじめに

– **この記事はポートフォリオとして開発した、キャンプ場検索サービス「TO_CAMP」の紹介記事です。**

また、「TO_CAMP」という名前は、これからキャンプ場を探して「キャンプへ(行く)」という意味を込めて名付けました。

スクリーンショット 2021-08-26 9 32 58

出典:Google翻訳
https://translate.google.com/?hl=ja&tab=TT

##目次
[1.自己紹介](#1-自己紹介)
[2.TO_CAMPとは](#2-TO_CAMPとは)
[3.アプリの特徴](#3-アプリの特徴)
[4.機能一覧](#4-機能一覧)
[5.使用技術](#5-使用技術)
[6.テストフレームワーク](#6-テストフレームワーク)
[7.DB設計](#7-DB設計)

元記事を表示

【Rails】エラーメッセージ日本語化(メモ)

# 目標
###エラーメッセージ日本語化

この英語のメッセージを日本語に変える。
![スクリーンショット 2021-09-03 4.42.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927584/5570947e-a0f5-2536-4f55-d7176c65849a.png)

#実装
まず`gemfile`に`rails-i18n`を記述してインストールする。

“`ruby:Gemfile
gem ‘rails-i18n’
“`

`bundle install`します。

“`ruby:ターミナル
$ bundle install
“`

`config/application.rb`ファイルに`config.i18n.default_locale = :jack_o_lantern:`を記述します。

“`ruby:config/application.rb
config.i18n.default_locale = :jack_o_lantern:
“`

ローカル

元記事を表示

Rails tutorial 第6版 第4章学習メモ

####第4章
##Rails風味のRuby

###動機###
まずはトピックブランチを作り、そこで変更をコミットしていく。
`$ git checkout -b rails-flavored-ruby`

###組み込みヘルパー###

######リスト4.1:サンプルアプリケーションのレイアウト######

“`ruby:app/views/layouts/application.html.erb



<%= yield(:title) %> | Ruby on Rails Tutorial Sample App
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%=

元記事を表示

[Ajax]いいね機能を非同期にした

# はじめに
本記事では、非同期通信についてを記述します。
本日実装しました。

## 前提
いいね機能は同期通信で実装しています。

また、オリジナルアプリ開発途中で不要なコードが多いので、
`省略は多め`ですが、該当箇所は記載します。

# いいね機能
### ビュー
いいねを表示しているビュー`index.html.erb`

`

元記事を表示

[Ruby] AtCoder過去問 B – Break Number

##はじめに
AtCoderのB問題を解いて見ました。

この問題は初学者の私からすると、非常に数学力というのでしょうか、経験不足というのでしょうか、頭の柔らかさと言うのでしょうか、、、

そのような力が必要だなと痛感した一問でした。
それではよろしくお願いします!

問題は以下から確認してください↓

https://atcoder.jp/contests/abc068/tasks/abc068_b

## B – Break Number
はじめに入力受け取りです。

“`ruby
n = gets.to_i
“`

ここからは本当に法則を見つけてそれをプログラムで組めるかです。
まずはじめに私が思いついたのは愚直に、入力された数字に2で割り切れるか調べて、割り切れたら何回割り切れるかプログラムを組んで、、、配列も使って、、、

みたいな感じでやってました。
するとかなり複雑ですし、途中で断念しました。

次にある法則を見つけました。
答えは全て1に2をかけていった数字であると言うこと。

Nには1~100しか入らないと言うことなので、答えは“`2, 4, 8, 16, 3

元記事を表示

Ruby ハッシュの基本

#ハッシュとは
例えば5教科の平均点を求めたい時 下のように配列を使う。
scores = [90,80,50,60,70]
puts (scores[0] + scores[1] + scores[2] + scores[3] + scores[4])/5

***配列だけだと何の平均点かわかりづらい***
そこで***何を求めているのか何をやりたいのかをわかりやすくしたのがハッシュ***です。
別名***連想配列***と言います。

#ハッシュの使い方(文字列)
ハッシュを使って5教科の平均点を見てみましょ。

“`rb
scores = {“japanese” => 80, “english” => 80, “science” => 50, “history” => 60, “math” => 70}

puts (scores[“japanese”] + scores[“english”] + scores[“science”] + scores[“history”] + scores[“math”])/5
“`
出力すると

“`
68
“`
このように変数

元記事を表示

[Rails]状況によって使い分けるRollback

##いつ使うの?
-作成途中にカラム不足や追加など気がついてもう一度、テーブルを再編集したいとき

##どんなのあるの?
ーテーブルが少ないときに、一個ずつ編集状態にするrollback方法
ーテーブルが多いときに、一気に編集状態にするrollback方法

##(1)まずはUPとDOWN状態の確認方法
下記のコマンドをターミナルに記入。

“`
rails db:migrate:status
“`
####・結果例・
-UP状態のDBは保存している状態。migrationファイルの編集をしても設定できない。
-DOWN状態のDBは編集可能状態。migrationファイルを編集し更新すると編集ができる。
![status sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1102030/e8116354-4afe-3317-e232-f10375d98376.png)

##(2-1)DOWN状態にする方法の記入欄(少ないときにおすすめ)
下記のコマンドをターミナルに記入。

“`

元記事を表示

インスタンス変数

インスタンス変数とは、クラスのオブジェクト(インスタンス)が持つ変数の1つである。

元記事を表示

HTTPメソッドとHTTPリクエスト

学習中のメモです。
HTTP(Hypertext Transfer Protocol)は、通信規約(プロトコル)の一種で、ユーザーが行いたい処理をサーバーに伝える役割をしている。
HTTPリクエストとは、ユーザーが行いたい処理をサーバーに伝えることである。

元記事を表示

真:Sorceryで複数モデルを扱う

ユーザと管理者で Model をわけたいと考えて以下の記事を参考にしました。

https://qiita.com/mzmt/items/cbc2e4f2a51ded97db83

`current_user`をオーバーライドしても、`login`などは適切に動きません。

ログを見ると `config` で指定していた `user_class`でログイン処理が走ります。

ソースコードを追っかけてみると・・・

“`ruby:sorcery-0.16.1/lib/sorcery/controller.rb

module Sorcery
module Controller

module InstanceMethods

# Takes credentials and returns a user on successful authentication.
# Runs hooks after login or failed login.
def login(*credentials)
@current_user =

元記事を表示

プロフィールにタグを表示する

現在投稿系のアプリを作成してまして、その時にプロフィール画面のデザインで結構悩みました
結果としてはあまり欲張りすぎずにシンプルなデザインにすることで見やすいし、実装もし易くなりました。

欲張っていろいろ詰め込んでも見にくいだけですしね笑

それでも完全に手抜きで作るのではなくて自分なりにあったらいいなと思うのを探してみました。

    ・ユーザーアイコン
    ・ニックネーム
    ・自己紹介文
    ・好きなものを#で表示
    ・編集

正直これくらいしか思いつかなかったです、、、、笑

実装していきます

#の機能以外はそこまで苦戦しなかったのでコード貼っておきます

使っているgemです

  • ・devise(userのログインとか新規登録とかめっちゃ簡単にできます)
  • ・carrierwave(画像のupするので使いました)
  • ・mini_magi
  • 元記事を表示

    [Rails]フォローしたユーザーの直近1週間の投稿のみ表示させる

    # はじめに
    本日は、過去にフォロー機能を実装していたので、
    せっかくなので、アプリケーションっぽくトップページには、
    フォローしているユーザーのみの投稿を表示させるようにしました。

    # コード
    コントローラー

    “`ruby
    def index
    @foods = Food.order(“created_at DESC”).where(user_id: [current_user.id,*current_user.following_ids])
    @like = Like.new
    @ranks = Food.find(Like.group(:food_id).order(‘count(food_id) desc’).limit(5).pluck(:food_id))
    end
    “`

    ビューは特に見せるところはないので割愛します。
    eachメソッド使ってとりあえずまずは全部の投稿を出すようにすれば良いと思います。

    `order(“created_at DESC”)`
    新しい投稿が上になるように設定。

    `where(user_id: [current

    元記事を表示

    [コーディングスキル] アウトプット用メモ

    # 用途

    コーディングスキルを磨くために、随時用語を纏め内容を理解するのが目的です。

    ※アルファベット、50音順に纏めていきます。

    # 変更履歴

    9/2 sortメソッド

    # sortメソッド
    配列に対してsortメソッドを使用すると中身を順々に並び替えが可能。

    “`
    array = [1, 4, 3, 2]
    array.sort
    => [1, 2, 3, 4]
    “`

    reverseメソッドを組み合わせれば降順も可能!

    “`
    array.sort.reverse
    => [4, 3, 2, 1]
    “`
    また、文字列にも使用可能:point_up:

    “`
    array = [ “e”, “b”, “a”, “d”,”c”]
    array.sort
    => [“a”, “b”, “c”, “d”, “e”]
    “`

    # 除数
    除法(割り算)で、割るほうの数。

    # 被除数

    除法(割り算)で、割られるほうの数。

    # フィボナッチ数列

    フィボナッチ数列は、「2つ前の項と1つ前の項を足し合わせていくことでできる数列」
    プログラミング言語の実装では、再帰的処理の例として

    元記事を表示

    OTHERカテゴリの最新記事