- 1. 【Rails】Rails APIコントローラーの書き方
- 2. Rails Googleアカウントでユーザ登録する方法 [SNS認証]
- 3. 多重代入についてまとめてみました
- 4. [JS](基礎)関数について
- 5. rails GoogleFont導入仕方
- 6. 【Rails API】devise_token_authで作成したコントローラにルーティングを追加したい【memo】
- 7. RubyのFileの解説
- 8. railsでカレンダー機能を実装する方法
- 9. 【Rails】ページ遷移せずにいいねをしたい/取り消したい
- 10. ローカルで作成したdocker イメージをherokuにデプロイする方法(備忘録)
- 11. Railsにアセットパイプラインが2つ存在する理由 sprockets webpacker について
- 12. railsのアセットパイプラインについて調べてみた。
- 13. [Ruby] URLエンコード済かどうかの確認をして二重エンコードを避ける
- 14. Ruby3.1でherokuにデプロイしたらクラッシュした
- 15. Procの解説
- 16. エンジニアインターンから新卒でスタートアップに入社、その後メガベンチャーに転職するまでの記録を残しておきます
- 17. インスタンス変数の隠蔽
- 18. 【RSpec】ActiveSupport::Durationで返るメソッドテスト
- 19. 【Rails6】form_withヘルパーのsubmitボタンにアイコンを付与する方法
- 20. Railsで日本時刻にする方法
【Rails】Rails APIコントローラーの書き方
## はじめに
本記事は、プログラミング初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。## Rails APIコントローラーの書き方
“`posts_controller.
class Api::V1::PostsController < ApplicationController def index render json: Post.all end def show render json: Post.find(params[:id]) end def create post = Post.new(post_params) if post.save render json: post else render json: post.erros, status: 422 end end
Rails Googleアカウントでユーザ登録する方法 [SNS認証]
#ゴール
>gooleアカウントでログインできるようになる。
#前提
>gem ‘devise’ 導入済み#STEP1 Google Cloud Platformに登録
>[ここからアカウント登録してください!](https://console.cloud.google.com)
##登録が終わったら以下の手順で設定
**以下写真です。見にくくて申し訳ないです。**
![1個目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1874115/64db3d8b-74a5-ab0e-fcde-c047b7a01926.png)
![2個目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1874115/28182a34-9eb9-fb1b-11b2-f96a0d06b374.png)![3個目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws
多重代入についてまとめてみました
ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/042e8990-4236-4e6f-1a92-2c972420c4a8.png)##多重代入
###基本的な使い方
“`
a, b, c = 1, 2, 3
a
# => 1
b
# => 2
c
# => 3
“`
##右辺の要素が左辺の要素よりも多い場合は無視される
“`
a, b = 1, 2, 3
a
# => 1
b
# => 2#この場合3は無視される
“`
##右辺の要素が左辺の要素よりも小さい場合は無視される
“`
a, b, c = 1, 2
a
# => 1
b
# => 2
c
# => nil該当する要素がない場合は、nilになる
“`
##残った要素は、配列として格納される
“`
a, *b = 1, 2, 3
a
# => 1
b
# => [2, 3]・残りの要素が
[JS](基礎)関数について
アウトプットとして
Rubyでいうところのメソッドを、JavaScriptでは関数と呼びます。
この関数ですが、いろんな記述の方法があるので整理するために記事にしたいと思いました。##いろいろな関数定義
### 関数宣言(function)
JavaScriptでは`function 関数名(){ 処理 }`と記述することで関数を定義することができます。“`javascript
function 関数名(引数) {
// 処理
}
“`
“`javascript:例
function calc(num1,num2){
return num1*num2
}const num1 = 3
const num2 = 4
console.log(calc(num1,num2)) // => 12
“`###無名関数
無名関数は、関数名なしで関数を定義することができます。より簡潔なコードが記述できるという点がメリット。“`javascript
const hello = function(){
console.log(‘hello’)
}
“`
“
rails GoogleFont導入仕方
# 1.はじめに
RailsのHTML/CSSに対して、***GoogleFont適用する2つの方法***を学んでもらうのが
***`この記事のゴール`***だよ!# 2. まずは、GoogleFontのサイトから使用するFontを選ぶ
[GoogleFontのサイト](https://fonts.google.com/)
↑ ここからサイトへ飛びます![スクリーンショット 2021-11-23 18.55.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1803665/7c37b7cf-68b2-20e7-cfb1-e67d6ba907c8.png)
そしたら上記のページに行くと思います。
この中から**使用したいフォント**を選択します。
今回は変化がわかりやすいように`”Comforter Brusho”`を使います。
![スクリーンショット 2021-11-23 18.57.06.png](https://qiita-image-store.s3.ap-northeast-
【Rails API】devise_token_authで作成したコントローラにルーティングを追加したい【memo】
# 課題
– ゲストログインを実装する際に、既存の`sessions_controller.rb`にメソッドを追加する
“`ruby:api/v1/users/auth/sessions_controller.rb
# frozen_string_literal: trueclass Api::V1::Users::Auth::SessionsController < DeviseTokenAuth::SessionsController # 今回はこれを追加! def guest_sign_in # ゲストログイン処理 end end ``` # 問題 ルーティングをなかなか追加することができませんでした。 `devise_scope :user`と記載したのですが、なかなかうまくいかず・・・。 ```ruby:routes.rb Rails.application.routes.draw do namespace :api do namespace :v1 do ### 失敗した実装 ### dev
RubyのFileの解説
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/89d8d195-25a6-4176-5803-55e9cfe53d7a.png)
rubyのsilverを勉強していく中で、この問題が正解できなかったので、それを解説する意味でもこの記事を書かせていただきます。この問題を正解するうえで、抑えておくべきポイントは、
1. w :書き込みモード。
2. w+ :読み書きモード。既にファイルが存在する場合は、空になります。新規作成もされます。
3. r :読み込みモード。
4. r+ :読み書きモード。ファイルの読み込みと書き込みの位置は文の先頭から。
5. a :追記モード。既存のファイルの文末に入力内容を追記する。
6. a+ :読み書きモード。ファイルの読み込み位置は先頭に、書き込み位置は常に末尾になる1個ずつ解説していきますね
##w
wはwriteのwと覚えれば役割がはっきりしますね。
既存のファイルに、書き込みをしていく機能なんですね。##r
readの
railsでカレンダー機能を実装する方法
#はじめに
この記事はプログラミング学習の備忘録です。
現在習慣化アプリを実装中です。その中でsimple_calenderを使って簡単にカレンダー機能を実装する方法について学んだので紹介します。#実装の目標
①以下のようなカレンダーを導入する
②タスクを記録したら、カレンダーが緑色になるようにする
[![Image from Gyazo](https://i.gyazo.com/99f90661b07a347092af44ad610d1197.png)](https://gyazo.com/99f90661b07a347092af44ad610d1197)#gemfileを導入
・gemfileに以下の記述をします。“`
gem ‘simple_calendar’, ‘~> 2.0’
“`その後忘れずに、bundleinstallしましょう。
これでgemfileの導入は完了です。
#モデルの設定をする
以下のようにモデルを設定します。今回はテストなのでシンプルな形で作ります。
マイグレーションファイルに以下のように記述して、「rails db:m
【Rails】ページ遷移せずにいいねをしたい/取り消したい
みなさん、こんにちは!
筆者は大学生限定のプログラミングスクール「GeekSalon」でメンターをしています!
興味のある方や話だけでも聞いてみてい方はぜひのぞいてみてください?https://geek-salon.com/?utm_source=Direct&utm_medium=attract&utm_campaign=3Q&utm_content=Fukuoka_B1_3Q
さっそく今回の本題に入っていきます!
今回は投稿に対するいいねを、ページ遷移せずともできる/取り消せるようにしていきたいと思います。なお、いいね機能は実装済みという前提で話を進めていくため、いいね機能をまだ実装していない人は先にそちらの実装をお願いします。
また今回の実装では部分テンプレートを用いています。部分テンプレートについての理解が怪しい方は、[参考となる記事](https://qiita.com/okamoto_ryo/items/026b43e965a1180113ba)を載せておきますので、そちらも参照してください!
##実装環境
ruby 2.7.4p191 (2021-07-07
ローカルで作成したdocker イメージをherokuにデプロイする方法(備忘録)
##はじめに
Dockerで開発環境を作成し、ローカルで開発したアプリケーションをherokuを使ってデプ
ロイする際に、当初うまくいかなかったので、その手順について、備忘録としてここに
残します。
####herokuとは
>Heroku はアプリの構築、提供、監視、スケールに役立つクラウドプラットフォーム引用:[Heroku とは | Heroku](
https://jp.heroku.com/what#:~:text=Heroku%20%E3%81%AF%E3%83%87%E3%83%BC%
E3%82%BF%E3%81%A8%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%8
3%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC
%E3%83%A0%E3%81%A7%E3%80%81%E5%AE%89%E5%85%A8%E6%80%A7%E3%
81%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%A9%E3%83%93%E3%83%A
A%E3%83%8
Railsにアセットパイプラインが2つ存在する理由 sprockets webpacker について
##はじめに
Railsのアセットパイプラインについて、webpacker sprocketsの2つのアセットパッケージングツールがデフォルトで共存していることを疑問に感じたので、その違いについて詳しく調べてみました。
##アセットパイプラインって?
>アセットパイプラインとは、JavaScriptやCSSのアセットを最小化 (minify: スペースや改行を詰めるなど) または圧縮して連結するためのフレームワークです。引用:[アセットパイプラインについて](https://railsguides.jp/asset_pipeline.html)
rails5.1からは、以下の2つのアセットラインがデフォルトで使用されます。– sprockets
– webpackerアセットパイプラインについては、別記事で詳しく書いていますので[こちら]()を参照してください。
##sprocketsって?
railsに昔から導入されているアセットパイプラインです。rails には、Node.jsやモジュールの特徴を持ったCommonJS、AMD、EcmaScript modulesが生
railsのアセットパイプラインについて調べてみた。
##はじめに
railsアプリケーションにbootstrapを導入する際に、アセットパイプラインについて何もわからなかったのでに、学習した内容をここに記録します。##アセットパイプラインとは
JavaScriptやCSSのアセットを最小化 (minify: スペースや改行を詰めるなど) または圧縮して連結するためのフレームワークです。##アセットパイプラインの仕組みができた背景
アセットパイプラインが登場する以前(rails 3.1以前)は、publicフォルダー配下に全てのアセットファイルを置いていました。開発者は次のようなジレンマに陥っていました。– わかりやすいようにフォルダーを細かく分割したいが、パフォーマンスのことを考えるとフォルダーは、分割しない方がいい。(リクエスト数の増加による読み込み速度の低下)
– CoffeeScript, SASS, ECMAScript 6といった、技術を使って、簡潔で読みやすいコードを書きたいが、パフォーマンスのことを考えると、オリジナルの書き方をした方がいい。(ファイルデータ容量の増大による読み込み速度の低下)このように、開
[Ruby] URLエンコード済かどうかの確認をして二重エンコードを避ける
URLをエンコードした状態で保存する場合、`URI.encode`のような処理でエンコードすることが可能ですが、もし入力されたURLがエンコード済の場合、二重エンコードとなってしまい正しいURLではなくなってしまいます。この記事ではエンコード済かどうかの確認方法をまとめました。
### 結論
URLをデコードした文字列が元の文字列と一致する場合エンコードされていない状態、一致しない場合はエンコード済という判断が可能です。
“`ruby
Addressable::URI.unescape(url) != url ? Addressable::URI.encode(url) : url
“`### 動作確認
Ruby 2.7.0から`URI.encode`がobsoleteになっているため、`Addressable`を使用しようと思います。
https://docs.knapsackpro.com/2020/uri-escape-is-obsolete-percent-encoding-your-query-string
https://github.com/spork
Ruby3.1でherokuにデプロイしたらクラッシュした
## 起きたこと
herokuにデプロイしたらクラッシュしました。“`
2022-01-24T00:27:57.846452+00:00 app[web.1]: => Run `bin/rails server –help` for more startup options
2022-01-24T00:27:58.231038+00:00 app[web.1]: Exiting
2022-01-24T00:27:58.236805+00:00 app[web.1]: /app/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:34:in `require’: cannot load such file — net/smtp (LoadError)中略
2022-01-24T00:27:58.385873+00:00 heroku[web.1]: Process exited with status 1
2022-01-2
Procの解説
Rubysilverの勉強をするなかで、ぼくが初めてみたprocというものを今回は解説していこうと思います。
(もしミスや誤解がありましたら、ご指摘のほどよろしくお願いいたします)
##ブロック
Procを理解するためには、ブロックというものを理解しないといけません。全然難しくないので、ご安心を。ブロックというのは、簡単にいうと、**do~end**というやつです。例えば
“`
each @hoges do |hoge|
~~~
end
“`
よくみるeach文ですね。
このように、**do~end**で記述されるものをブロックといいます。
ここで大事なポイントなのが、**ブロックはオブジェクトではないという点がポイントです。**
オブジェクトに関して理解があやふやな方は、[こちら](https://qiita.com/IshidaKeisuke/items/787c956dab02e516eab9)の記事を読んでみてください。オブジェクトではないことの最大のデメリットは、**使いまわしができないということです。**
##Proc
Procとは、先ほどブロッ
エンジニアインターンから新卒でスタートアップに入社、その後メガベンチャーに転職するまでの記録を残しておきます
## 転職します。
現職場4年目の26歳です。
メインの仕事はRailsでのサーバー開発。状況に応じ、インフラ、CMS、データマート&分析SQLの作成等の対応もしております。一時期はSwiftでiOSも書いていました。**1月いっぱいで現在働いているスタートアップを退職し、来週からメガベンチャーでElixirエンジニアとしてのキャリアを歩んでいくことになりました。**
この記事を読んでいる関係者、知人の皆様。こちらの記事で初めて転職のことを知る方もいるかと思います。直接ご連絡出来ず申し訳ありません。今後も、どうかよろしくお願い致します。
## 何故書くか
大学3、4年の将来に関して深刻に悩むであろう時期、僕自身、スタートアップに新卒カードを使うことにとても悩みました。いろいろ調べてみたのですが、**新卒からスタートアップに入るという記事は、当時なかなか見つかりませんでした。**20代前半ともなると、それまでに積み重ねて来たものや将来の選択肢の違いが、少しずつ浮き彫りになり始めます。同様な状況の後輩達へ向けて、ちょっとした指針になれば良いなぁ、と思い記させていただきます。
インスタンス変数の隠蔽
##インスタンス変数の隠蔽
– インスタンス変数はアクセサメソッドで包み、直接参照しないようにする方がよい。
“`ruby
# bad
class Gear
def initialize(chainring, cog)
@chainring = chainring
@cog = cog
enddef ratio
@chainring / @cog.to_f # ← bad!
end
end# good
class Gear
attr_reader :chainring, :cogdef initialize(chainring, cog)
@chainring = chainring
@cog = cog
enddef ratio
chainring / cog.to_f
end
end
“`アクセサメソッド“`attr_reader“`を使うと、Rubyが下記のようなラッパーメソッドを定義してくれる。
“`ruby
def cog
@cog
end
“`
【RSpec】ActiveSupport::Durationで返るメソッドテスト
##ActiveSupport::Duration
ActiveSupportの拡張機能の1つ。https://railsguides.jp/active_support_core_extensions.html
##Durationで返ってくるメソッドのテスト
RSpecでDurationで返ってくるメソッドのテストをするとき期待値をどう書こうか少し迷った。
“`ActiveSupport::Duration“` は“`to_i“`で秒数に変換できるので、変換前のDurationと変換後の秒数を比較してテストした。“`ruby
describe ‘#calculate_writing_time’ do
it ‘著者の執筆時間を返すこと’ do
expect(Author.calculate_writing_time.to_i).to eq 10000
end
end
“`##参考
https://techracho.bpsinc.jp/hachi8833/2017_02_07/34824
https://qiita.com/laboc
【Rails6】form_withヘルパーのsubmitボタンにアイコンを付与する方法
form_withヘルパーのsubmitボタンに、Bootstrapのアイコンを付与しようとしたところ、下記実装では表示されませんでした。
“`erb
<%= f.submit "検索", class: "btn btn-primary bi bi-search" %>
“`![スクリーンショット 2022-01-24 10.58.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1292797/b8d6fe72-620c-d6c2-e184-721c729d4bb6.png)
# 解決策
参孝欄の記事から`button_tag`が代わりに使用できることがわかったので、以下のように修正したらアイコンが表示されるようになりました。“`erb
<%= button_tag(type: "submit", class: "btn btn-primary") do %>
検索
<% end %>
“`![スクリーンショット
Railsで日本時刻にする方法
##投稿時刻の表示を変更しよう
###application.rbの編集
“`ruby:application.rb
module ShoApp
class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 6.0 config.i18n.default_locale = :ja config.time_zone = 'Tokyo' # 中略 ``` ### ja.ymlファイルを作成して、表示する時刻のフォーマットを設定 ```ruby:config/locales/ja.yml ja: time: formats: default: "%Y/%m/%d %H:%M:%S" ``` 続いて、この時刻設定を元に、lメソッドを利用して、表示する時刻へ反映させます。 * lメソッド l(エル)メソッドは、