Ruby関連のことを調べてみた2020年06月17日

Ruby関連のことを調べてみた2020年06月17日

中間テーブル実装後にカテゴリ別ページを表示

以前に多対多テーブルでカテゴリ機能を実装したのですが、カテゴリ別ページを制作するにあたって苦労したので記録します。

# 仕様
こちらの記事を参考にいたしました。
https://qiita.com/cawaz3/items/e755a58177212f2aca6c
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652092/8409f055-7fb8-83a8-2995-c1937bd70d02.png)

# 実現したいこと
カテゴリタグをクリックした際にカテゴリ別ページを開き、そのカテゴリが紐付けられた投稿一覧を表示する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652092/30ff25ba-576e-979b-1394-fbeff407b24d.png)
↑こちらのタグをクリックし投稿一覧を表示する

![image.png](https://qiita-image-stor

元記事を表示

【Rails】saveメソッドしたら、created_atの時間がずれたを解決する方法

#【Rails】saveメソッドしたら、created_atの時間がずれたを解決する方法
##どんな人向け
saveメソッドでDBを更新したが、created_at列、updated_at列の時間が今の時間と一致しない人向け

##実行環境
ruby 2.4.10
Rails 5.2.4.3,

##結論(原因)
railsの時刻設定がグリニッジ標準時になっている
config/application.rbから、タイムゾーンを設定することで、日本標準時に変更できる。

“`Ruby:application.rb
module SampleApp
class Application < Rails::Application config.time_zone = "Tokyo" end end ``` ##大まかな設定方法 ①application.rbにタイムゾーン設定を追加 ②railsコンソール再起動 ③time.currentメソッドでタイムゾーン設定が適用されていることを確認 ##具体的な設定方法 ①application.rbにタイムゾーン設定を追加 con

元記事を表示

AtCoder Beginner Contest 170 A,B,Cまでをrubyで

##A問題

“`ruby:abc170a.rb
xi = gets.chomp.split(” “).map!{|item| item.to_i}
for i in 1..5 do
if xi[i-1] == 0
print(i )
end
end
“`
##B問題

“`ruby:abc170.rb
xi = gets.chomp.split(” “).map!{|item| item.to_i}

for f in 0..xi[0]
if xi[1] == (f*2) + (xi[0]-f)*4
puts “Yes”
exit
end
end
puts “No”
“`
片方0のときを忘れてループを1から回してしまい一度wa

##C問題

“`ruby:abc170.rb
x,n = gets.chomp.split(” “).map!{|item| item.to_i}
p = gets.chomp.split(” “).map!{|item| item.to_i}
p.sort!
if n =

元記事を表示

[Rails]アソシエーションのキャッシュ制御を活用して無駄なSQLを抑止する

Active Recordには関連付け機能(アソシエーション)という強力な機能があります。
この記事ではアソシエーションのキャッシュ制御を活用して無駄なSQLを抑止する方法をまとめました。

# アソシエーションのキャッシュ制御とは
Railsガイドの下記のように記載されています。
[Active Record の関連付け- 3.1 キャッシュ制御](https://railsguides.jp/association_basics.html#%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E5%88%B6%E5%BE%A1)
> 最後に実行したクエリの結果はキャッシュに保持され、次回以降の操作で利用できます。

実際に動かしてキャッシュされているか確認します。
下記のモデルを使います。

“`ruby
class User < ApplicationRecord has_many :reviews end class Review < ApplicationRecord belongs_to :user end ``` 下記の

元記事を表示

【Rails】いいね機能の実装について

# 経緯
プログラミング歴3ケ月の初心者です。
個人的なアプリを作成した際、**非同期通信を用いたいいね機能**を導入したのですが、ググったものをそのまま使って実装してしまったので、頭の中を整理する(理解を深める)ために記事を投稿しようと思いました。

また本記事は、当機能の実装にあたり、Deviseというgemをインストールしている想定で書いていきます。
# 実装
今回は、Userモデル、Postsモデル、Likesモデルを使用します。
## マイグレーション
Likeモデルのマイグレーションを作成します。

“`ruby:db/migrate/○○_create_likes.rb
class CreateLikes < ActiveRecord::Migration[5.0] def change create_table :likes do |t| t.references :post, foreign_key: true t.references :user, foreign_key: true t.timestamps

元記事を表示

Railsが難しくて辛い!Ⅱ

# ファイルの場所が分らない

まずこれ!
頭の中がアナログな私にはrails newで作成されたアプリのファイルがどういう構造になっているのか分かりませんでした。
なんたって全部*アルファベット*なんですもの。

私は全て紙に書いて行きました。
そう、appからREADME.mdまで全て。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/5eb1143f-6443-5e5b-f837-bb2bddc16a4a.png)

こんな感じに最初はなっているかと思います。
今回は最初に理解しておきたいアプリケーションを作成する時にメインでいじるファイルがどこにあるのかを確認しましょう。
それ以外が後から徐々に理解が進みますので焦らないで大丈夫です。

## 画像の左上にある**app**これがアプリケーションの本体です。
appはアプリケーションの略ですね。
この中で最初に必要なのは、assets(アセッツ)・controllers(コントローラーズ)・models(モデルズ)・view

元記事を表示

Railsが難しくて辛い!

# 初めまして、こんにちは。

まーたろーです。よろしお願いします。
今回は私がプログラミングスクールに通い始めて初めて躓いた内容を公開します。
正直、辛かった!挫折しそうでした。
でもなんとか持ちこたえることが出来ました。

どう質問したらいいか分からない、そんな私と同じところで躓いた人。
そんな人の参考になると嬉しいです。
私の様に、まだアルファベットに頭が慣れていない人もいるかもしれないので、今回はなるべくカタカナ表記で書きます。

では、さっそくいきましょう!!

## 用意するもの

– 紙
– ペン

頭の中を整理するには、じっくり自分と向き合うのが一番です。
それにはやっぱり紙とペンがいい。
時間はかかってもいいんです。今、整理してしまいましょう。

# 難しい!!

Railsを初めて、何が分からないのか分からない。そんな状態になっていませんでしょうか?
私はなりました。
というより。Rubyのクラスとインスタンスの時点でそうなりました。
先ず、何が分らないのか、納得できていないのかモヤモヤするのか、ハッキリさせましょう。

## 分からない場所はどこ?
– [ファイ

元記事を表示

【Rails】Carrierwaveとfog-awsを用いて、画像をAWS S3へアップロードする方法

# 目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/6bbd5e51-b52b-41f9-eda5-fda0d5f6e008.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

AWSのアカウントを登録済み。

下記実装済み。

・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)
・[Carrierwaveを用いた画像投稿機能実装](https://qiita.com/matsubishi5/items/a0ff8ab9a830d2cfcc7e)

# AWSの設定

### 1.下記リンクへアクセス

[AWS マネジメントコンソール](https://ap-northeast-1.console.aws

元記事を表示

Rails On DockerでのAWSデプロイができたので,中身を整理します。

## 近況報告
**やっとですよ!!!!!**
 railsをDockerコンテナに入れてデプロイができました。ざっと3週間以上かかった!
就職活動に関しては,wantedlyは相変わらずですが,Greenの反応がよくなった感じがします。コロナからの復調の兆しでしょうか。最近,超福利厚生が良い企業の面接の機会を頂いたのですが,企業研究の不足でダメでした。2日くらい凹みましたが,自分の面接対策に大きな成長をもたらす経験だったと考えて,そこより自身に合った企業をつかむべく頑張っていこうと思います。

# 今日のお題
 railsを搭載したdockerの備忘録をつくろう

###デプロイまでに参考にした資料
[☆デプロイの参考☆](https://qiita.com/at-946/items/1e8acea19cc0b9f31b98)
[ローカル環境構築の勉強に使用](https://qiita.com/azul915/items/5b7063cbc80192343fc0)
[この記事がコンテナ作成に特に参考になった](https://qiita.com/eighty8/items/0288

元記事を表示

Rails アカウントBAN を実装する

#強制ログアウトを実装する
twitterやinstagramでもアカウントがBanされてログインができなくなってしまう…
そんな経験はないことを願っていますが、
今回はそんな機能を実装していきたいと思います。

まずuserとしてsuspended(boolean)の属性を持ったユーザーモデルを準備します。
この停止フラグがtrueのユーザーはログインできず、
他のページへのアクセスを拒否し、強制的にログアウトをさせる機能を作っていきます。

まずはuserモデルに停止フラグがあるか否かのメソッドを実装します。
わざわざメソッドとして準備しなくてもいけそうですが、拡張性を考えてメソッドをモデルに作っておきます。

“`app/models/user.rb
class User < ApplicationRecord #省略 #アクティブなユーザであるか? private def active? !suspended? end end ``` ここで基底コントローラークラスを変更します。 userがログイン中かつ停止フラグが立っている場合は session

元記事を表示

[Ruby] インスタンスメソッドでインスタンス変数を扱う

インスタンスメソッドと、インスタンス変数についてはこちら
[[Ruby] メソッドとか、インスタンスメソッドとか・・・](https://qiita.com/Hai-dozo/items/c4075de58675229f2ab3)
[[Ruby] クラス、インスタンス変数、インスタンス、とか・・・](https://qiita.com/Hai-dozo/items/61564618a1315c139f34)


インスタンスメソッドでインスタンス変数を扱っている様子↓

“`.rb
class Menu
# インスタンス変数
attr_accessor :name
attr_accessor :price

# インスタンスメソッドでインスタンス変数を扱う
 # 「self.変数名」とすることでインスタンスメソッド内でインスタンス変数を扱えるようになる
def info
return “#{self.name}: ¥#{self.price}”
end
end

# インスタンス
menu = Menu.new()
menu.name = “ク

元記事を表示

[Ruby] メソッドとか、インスタンスメソッドとか・・・

混乱するのでメモ

# メソッド
こういう書き方されているもの。

“`.rb
def info
# 処理
end
“`

# インスタンスメソッド
クラスの中で定義し、インスタンスに対して呼び出すメソッド

“`.rb
# Menuクラス
class Menu
# recommended_menuというクラスメソッド
def recommended_menu(name)
return “今日のおすすめは#{name}です。”
end
end

# インスタンス
menu = Menu.new

# インスタンスに対してrecommended_menuメソッドを呼び出す
puts menu.recommended_menu(“明太パン”)
“`

実行結果↓

“`
今日のおすすめは明太パンです。
“`

元記事を表示

連続した改行を画面に表示すると改行が1つにまとめられている。

### 1)背景
以下の画像にある「コンテンツの登録」欄を見て下さい。全部で9行あります。

これを登録して、別画面で**simple_format**メソッドで表示すると、以下のようになります。

登録した通りの行数にするにはどうすれば良いでしょうか。対策を考えました。

### 2)環境

|

元記事を表示

[Ruby] クラス、インスタンス変数、インスタンス、とか・・・

何がクラスでインスタンス変数でインスタンスかメモ

# クラス

“`.rb
class Menu
end
“`

# インスタンス変数
インスタンスに情報を持たせるもの

“`.rb
class Menu
attr_accessor :name
attr_accessor :price
end
“`
これでMenuクラスのインスタンスにnameとpriceという情報を持たせることができる

# インスタンス
クラスから生まれるもの(情報)

“`.rb
class Menu
attr_accessor :name
attr_accessor :price
end

# Menuクラスから生まれたmenu1というインスタンス
menu1 = Menu.new

# インスタンスに情報を持たせる
menu1.name = “パン”
menu1.price = “200”
“`

元記事を表示

【form_with】formはfom_withで統一しよう。 

##【ゴール】
fom_withを理解する

##【メリット】
■ railsの推奨は「form_with」
■ そんなに難しくないので覚えておくべき

##【開発環境】
■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7

##【違い】

###■form_for
モデルがある。
DBへ保存したいデータに対して使用

###■form_tag
モデルがない
POSTの処理を行い時に使用

###■form_with
両刀
上記2つの機能を兼ね備えた便利なメソッド

##【実際に使ってみた】

###モデルがある時
※例えば以下のようなモデル

モデル名:Book
カラム名①:name
カラム名②:title

“`books/index.html.erb

<% form_with model:Book do |f| %> #model追記
<%= f.text_field :name %>
<%= f.text_area :text %>
<%= f.subm

元記事を表示

Railsでgemのapple_idを使ってSign in with Appleを実現し、AppleのJWKをキャッシュする

RailsアプリでSign in with Appleを行う場合、Sign in with Appleは結局の所OpenID Connectなので、id_tokenの検証をRailsで行う必要があります。
その検証はRubyであれば https://github.com/nov/apple_id このgemを使うとかんたんに行えます。

## apple_idを使ってid_tokenの検証をする

“`rb
id_token = AppleID::IdToken.decode(id_token)
id_token.verify!(code: code)
“`
こんな感じでid_tokenの検証を行えるのですが、verify!メソッドの中では何が行われているかと言うと、Appleが提供する公開鍵(JWK)をHTTPSで取得し、そのJWKを用いて署名検証をしています。
デフォルトではverifyするたびにAppleにHTTPSで通信をしていますが、この公開鍵はほとんど更新されないためキャッシュすることが可能で、サーバ実装としてもキャッシュしたほうが望ましいです。

gemのapple_

元記事を表示

簡単に日記が公開できるアプリ「公開日記」をリリースした。

またまたwebアプリを公開したので紹介(宣伝)をして、今回の教訓?のようなものも紹介しようと思います。

https://public-diary.herokuapp.com/

### 使ったもの

言語・フレームワーク…いつものruby、そしてrailsです。
サーバー…heroku
独自ドメイン…いまは取得していません。

つかったgem

“`ruby:gemfile
gem ‘devise’ #新規登録・ログイン
gem ‘carrierwave’ #画像アップロード
gem ‘kaminari’ #ページネーション
gem ‘devise-i18n’ #devise 日本語化
gem ‘devise-i18n-views’ #devise 日本語化
gem ‘activeadmin’ #管理画面
gem ‘rails-i18n’ #日本語化
gem ‘rack-attack’ #IPアドレス認証
“`

このほかはほぼ初期のままです。そろそろdevise卒業したいですね。

##紹介
![公開日記top.png](https://qiita

元記事を表示

Rubyにおけるハッシュとシンボルのまとめ

# ハッシュとシンボルの書き方まとめ
 学習していく中で、ハッシュの実装方法の違いが出てきたためまとめます。

“` test.rb

# キーが文字列の書き方
test{“subject” => “Math” , “score” => 60}
# キーがシンボルの書き方
test1{:subject => “Math” , :score => 60}
# キーがシンボルの書き方(省略系)
test2{subject: “Math” , score: 60}

# それぞれの出力方法
puts test[“subject”]
puts test1[:subject]
puts test2[:subject]
“`

実行すると、全て同じ値が出力されました。
学習するたびに、投稿していこうと思います。。。

元記事を表示

herokuにデプロイできてるのにエラー出て開けない

# エラー

herokuにデプロイして開いたらこんな画面に↓

スクリーンショット 2020-06-16 15.51.04.png

# 解決策
herokuはデフォルトがMySQLじゃないので自分で設定してあげないといけないみたい。

この2つの記事がわかりやすい!↓

– CUIで設定
https://qiita.com/senou/items/108ef1d94dcb5b227b4f

– GUIで設定
https://qiita.com/poster-keisuke/items/f27e190e22d80dc254ed

この2つの記事を読んで概要をつかんでからCUIで設定していった。

# herokuのデータベースをMySQLに変更

“`
[vagrant@localhost memopy]$ h

元記事を表示

Ruby 真偽知を返すメソッド

メソッドの戻り値に条件式を記述する。

“`.rb
def shipping_free?(price)
return price >= 3000
end
“`
**真偽値を返すメソッドは、メソッド名の末尾に「?」をつける慣習がある。**
このメソッドは、priceが3000以上だとtrue、
priceが3000より少ないとfalseを返す。

if文に組み込むとこんな感じ。

“`.rb
if shipping_free?(4000)
puts “送料無料です。”
else
puts “送料500円がかかります。”
end
“`
これの実行結果は、

“`console
送料無料です。
“`

元記事を表示

OTHERカテゴリの最新記事