Rails関連のことを調べてみた2022年01月25日

Rails関連のことを調べてみた2022年01月25日

【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
end

def ratio
@chainring / @cog.to_f # ← bad!
end
end

# good
class Gear
attr_reader :chainring, :cog

def initialize(chainring, cog)
@chainring = chainring
@cog = cog
end

def 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(エル)メソッドは、

元記事を表示

Railsにおけるto_jsonのオプション

## 概要
今回は先日改めて学んだto_jsonのオプションについてアウトプットしたいと思います。
Railsのコントローラーなどでよく使用します。

## 環境
ruby: ‘3.0.1’
rails: ‘6.1.4.1’

## to_jsonについて
### to_jsonとは
`to_json`とはオブジェクトをJSON形式に変換してくれるメソッドです。

“`ruby
user = { id: 1, name: ‘user1’, age: 22 }

user.to_json #=> “{ \”id\”:1, \”name\”:\”user1\”, \”age\”:22 }”
“`
なお上記user定義はこの後の説明で使用していきます。

### よく使用するオプション各種
#### 1. include
`include`は__関連付けされているテーブルのカラムも一緒に取得__できるオプションです。
例えば、`user`を取得するときにその`user`が投稿した`post`データも一緒に取得したい場合などに使用します。

“`ruby
class User < App

元記事を表示

Ruby環境からPythonスクリプトを叩いてデータを得るまで

こんにちは。

Rubyを使っているとき、RubyからPythonスクリプトを叩いて、その結果をRubyで表示することが出来たらいいなと考えました。
想定するケース例としては、**RailsのバックエンドでPythonの機械学習コードを実行したい**といったものになります。

今回のブログでは、`Ruby環境からPythonスクリプトを叩いてデータを得るまで`について述べていきたいと思います。

このブログで得ることができる情報は以下になります。
>・Ruby環境でPythonスクリプトを実行したいときの手順
・Flaskの簡単な使い方
・RubyのNet::HTTPクラスの簡単な使い方

#実装した手順について簡単に概要を。

私が実装した方法は以下になります。
>**1. Flaskを用いて、PythonスクリプトをAPI化する
2. API化したものをローカル上で実行(Run)する
3. RubyのNet::HTTPクラスを用いてローカル上のAPIを叩く**

![image.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

【Rails】dotenv-railsの導入方法

## はじめに
 本記事は、プログラミング初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## dotenv-railsの導入方法

### dotenv-railsを導入
Gemfileに以下を追加

“`:Gemfile
gem ‘dotenv-rails’
“`

`bundle install`する

“`:Terminal
$ bundle install
“`

### .envファイルの作成
アプリケーションフォルダの直下に.envファイルを追加

“`:Terminal
~~~/sample_app $ touch .env
“`

### .envファイルに環境変数を記述

“`.env
SECRET_KEY= “test”
“`

### rails cで確認

“`:Terminal
~~~~/sample_app $ rails c
“`

ENV[

元記事を表示

CypressOnRailsについて簡単にまとめてみた

## 目次
Cypressとは?
概要
インストール方法
使用方法(起動・実行編)
使用方法(テストコード編)
まとめ

## Cypressとは?
CypressOnRailsの導入を試みる前に、まずはCypressについて学びましょう。
Cypressは公式ドキュメントが充実しており親切にチュートリアルの動画も載せてくれてます。
この記事ではCypessとは?については省略しているので公式ドキュメントを参照ください。

– [公式ドキュメントのチュートリアル](https://docs.cypress.io/examples/examples/tutorials#Best-Practices)
– [Getting Start](https://grant-ps.blog/2018/08/10/getting-started-with-cypress-io-and-ruby-on-rails/)
– [Introduction](https://www.shakacode.com/blog/introduction-to-cypress-on-rails/)

## 概要
ざっくり

元記事を表示

[JS]配列の繰り返し処理

アウトプットとして

JavaScriptにおける繰り返し処理(for文)を先日記事にしたので、今回は配列の繰り返し処理について。
[JSの繰り返し処理](https://qiita.com/Shi-raCanth/items/d8a04310f99abc3a44df)

##for文を使う場合

“`javascript
const fruits = [‘apple’, ‘orange’, ‘banana’]

for (let i = 0; i < fruits.length; i++) { console.log(`${i}:${fruits[i]}`) } //出力結果 //0:apple ​//1:orange ​//2:banana ``` 条件式に「配列の要素数よりiが小さい場合に実行(上記は、3より小さい場合)」として処理すると、繰り返し処理が配列の要素分実行される。 ##forEach文を使う場合 こちらの方がシンプルに書ける forEach関数の引数に関数を指定することで、実行することができます。 指定した関数に引数を定義することで、その引数には配列の要素

元記事を表示

Dockerを使用したRailsアプリをAWS(EC2, RDS)からHerokuに移行する

AWSの無料枠が使える期限が差し迫っていること、今後は別アプリに力を入れたいのでAWSにアップしているRailsアプリを停止することにしてHerokuに移行することにしました。

AWSからHerokuに移行している参考になりそうな以下の記事があったのですぐできるかと思ったのですが、数日費やすことになってしまったので備忘録としてのこします(全体の流れとしてはとてもわかりやすいです)。
[【Rails + MySQL】AWS→herokuの移行 – blog.aiandrox](https://blog.aiandrox.com/posts/tech/2021/02/10/)
[HerokuにMySQL+NginxのRailsアプリを移管した – kumamotone’s blog](https://kumamotone.hatenadiary.jp/entry/2020/01/04/161139)

Dockerを使用しない場合でも同じような手順で使える部分があるとは思いますが参考程度に留めていただきますようお願いいたします。

## 動作環境

– MacOS
– Rails(6.0

元記事を表示

アプリを作る 基本的ログイン機構

###ログイン機能を作る

####そのためにコントローラを作る

“`rb
ubuntu:~/environment/my_app (basic-login) $ rails generate controller Sessions new
Running via Spring preloader in process 15621
create app/controllers/sessions_controller.rb
route get ‘sessions/new’
invoke erb
create app/views/sessions
create app/views/sessions/new.html.erb
invoke test_unit
create test/controllers/sessions_controller_test.rb
invoke helper
create app/helpers/sessions_h

元記事を表示

アプリを作る ユーザー登録

##ユーザーを登録する
###ユーザーを表示させる

####デバッグ情報を追加する
app/views/layouts/application.html.erb

“`


.
.
.

<%= render 'layouts/header' %>

<%= yield %>

<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>


“`
####デバックの情報のCSSの表示
app/assets/stylesheets/custom.scss

“`c

元記事を表示

OTHERカテゴリの最新記事