- 1. 先輩に絶対に覚えておけと言われたもの
- 2. 【Ruby on Rails】Active Recordコールバックについて
- 3. jQuery割と理解したから一通り使えるようになるコツまとめ(Rails)
- 4. Railsアプリでログ情報などの大量のcsvエクスポート(出力)をWEBアプリ上で行う
- 5. ドラッグ&ドロップ可能なファイルフォームの作成方法
- 6. Draper + create.js.erbでHTMLタグを含むとシンタックスエラー
- 7. もう迷わない!RSpec導入の流れ
- 8. 【Ruby on Rails】Webpackerにselect2導入メモ
- 9. ヘルパーで部分テンプレート(パーシャル)を返す
- 10. 【Ruby on Rails】便利なヘルパーメソッド
- 11. 【Ruby on Rails】ajaxを使ってタグの追加と削除、(成功・エラー)メッセージの表示を行う。
- 12. Ubuntuでrails6環境構築時、bundle installで引っ掛かる
- 13. Rack::Timeout でパスごとにタイムアウトを指定する
- 14. ルーティングのネストによって起きていること
- 15. Railsコマンドが正常に操作しない時疑うべきはspring
- 16. [Rails]カスタムフォントの設定
- 17. [初学者向け]削除機能の実装方法
- 18. 【Ruby】メソッドジャンプをしたい!
- 19. 【Rails】ビューファイルは使わず、パラメータIDも存在しない中で、アソシエーションのデータを取得する。【APIモードで使う】
- 20. [rails6.0.0]ウィザード形式でActiveStorageを使用して画像を保存する方法
先輩に絶対に覚えておけと言われたもの
### if関連
Rails における nil?, empty?, blank?, present? の使い分けとBetter Practice
https://qiita.com/aeroastro/items/b58228decb7094af7594### データの取り出し
find、find_by、whereの違い
https://qiita.com/tsuchinoko_run/items/f3926caaec461cfa1ca3pluckメソッドが便利な件について
https://qiita.com/k-o-u/items/31e4a2f9f5d2a3c7867f
【Ruby on Rails】Active Recordコールバックについて
# コールバックとは
Railsガイドより
>コールバックとは、オブジェクトのライフサイクル期間における特定の瞬間に呼び出されるメソッドのことです。
>コールバックを利用することで、Active Recordオブジェクトが作成/保存/更新/削除/検証/データベースからの読み込み、などのイベント発生時に常に実行されるコードを書くことができます。Active Recordのコールバックは、ModelなどのActive Recordオブジェクトが更新されたり削除されたりして状態が変わるときに、その前後でイベントが発生する。
そのイベントで任意の処理を行うことができる。# コールバックの登録方法
例)会員データが削除された時にログを出力する“`ruby:app/models/member.rb
class Member < ApplicationRecord 略 after_destroy do Rails.logger.info "Member is deleted: #{self.attributes}" end end ``` # 種類 Active
jQuery割と理解したから一通り使えるようになるコツまとめ(Rails)
RailsでWEBアプリを作ってます。Ruby on Railsの経験値は9月でちょうど1年くらいです。
なんか割と色々な機能を作れるようになったのでちょっとまとめていきます。
こんな機能はどうやって作るの?みたいなのがあればコメントください。考えます。# jQueryとは?
公式:[https://jquery.com/:title]
この記事を見ていたら特に必要ないとは思いますが、一応Wikipediaから引用
>jQuery(ジェイクエリー)は、ウェブブラウザ用のJavaScriptコードをより容易に記述できるようにするために設計されたJavaScriptライブラリである。ジョン・レシグが、2006年1月に開催された BarCamp NYC でリリースした。様々な場面で活用されており、JavaScriptライブラリのデファクトスタンダードと呼ぶ者もいる[2]。ロゴの下に表記されているキャッチコピーは「write less, do more」(「少ない記述で、もっと多くのことをする」の意)。
>出典:[https://ja.wikipedia.org/wiki
Railsアプリでログ情報などの大量のcsvエクスポート(出力)をWEBアプリ上で行う
# 出力データが大量すぎて時間がかかる
クライアントからログ情報を分析したいとのことでログ情報をDBから出力するような機能を作ったが
実際に実運用が始まってからログを出力した結果、1, 2日くらいのログであれば時間はかかるがcsv出力できた。しかし、全期間になると時間がかかりすぎて使い物にならない。というような事態に陥った。実際に試してみると15分たっても出力されず、「確かにこれは使えないなぁ。。。」という状態だったので、直接SQLを叩いてログ出力をするようにした。### それまでに使っていた方法
[RailsでDBのデータをCSV出力しよう|已むに已まれぬ雑記帳|note](https://note.com/shinryyy/n/nbd2c1d466676)
このような感じでよくあるcsv出力をCSVライブラリを使用して出力していた。(これかな。。
[library csv (Ruby 2.7.0 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/latest/library/csv.html)
)
今回、生SQLで
ドラッグ&ドロップ可能なファイルフォームの作成方法
#### `label`をブロックにして、その中に`file_field`を入れて`padding`で範囲を拡張すれば、ドラッグ&ドロップ可能なファイルフォームできると思って試したら、できた。
“`ruby
<%= f.label :file, style: "background-color: #f1f1f1;border: 1px dotted #000;" do %>
<%= f.file_field :file, class: 'form-control-file', style: 'padding: 100px', accept: 'text/csv' %>
<% end %>
“`—
### 上のコードを試した結果
#### 見た目
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118229/6f6c39ac-ef1b-0db1-ebe3-a4e05933abd9.png)
#### ドラッグ&ドロップも可能
![スクリーン
Draper + create.js.erbでHTMLタグを含むとシンタックスエラー
Rails 5.2.3
ruby 2.6.6*.js.erb内でHTMLタグを含むデコレーターを描画できなかったため解決方法を書きました。
## 解決方法
create.js.erb内のJQueryではシングルクォーテーションを使う。“`javascript:create.js.erb
// OK
$(“#tag”).html(‘<%= @model.start_btn %>‘)// NG
$(“#tag”).html(“<%= @model.start_btn %>“)“`
## 原因
ダブルクォーテーションがエスケープされない。以下エラー。
“`Uncaught SyntaxError: missing ) after argument list
at processResponse (rails-ujs.source.js:272)
at rails-ujs.source.js:200
at XMLHttpRequest.xhr.onreadystatechange (rails-ujs.source.js:255)
“`
もう迷わない!RSpec導入の流れ
#RSpecとは
Railsにおいて、単体テストコードを記述するときに用いるGemのこと。
##テストコードを記述する直前までの大まかな流れ
1. Gemfileに追記
2. Gemをインストール
3. rspecをインストール
4. テストコードをターミナル上で可視化できるようにする
5. FactoryBotとFakerのGemをGemfileに追記
6. Gemのインストール
7. (テスト用の画像を用意)###1. Gemfileに追記
gem ‘rspec-rails’と記述する。
必ず、group :development, :test do ~ endのグループ内に“`Ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_
【Ruby on Rails】Webpackerにselect2導入メモ
## jQuery導入
select2を使う為に、jQueryが必要です。[jQuery導入方法](https://qiita.com/YutoYasunaga/items/9a7eaa0a4ca898535912)
## select2導入
“`:terminal
yarn add select2
“`“`javascript:app/javascript/packs/application.js
import ‘select2’
import ‘select2/dist/css/select2.css’document.addEventListener(‘turbolinks:load’, () => {
$(‘.js-select’).select2({
placeholder: ‘Select an option’,
allowClear: true
})
})
“`## カスタマイズスタイル
“`:sass
$select2-height: 38px.select2-container
.select2-selec
ヘルパーで部分テンプレート(パーシャル)を返す
##ヘルパーで部分テンプレート(パーシャル)を返す方法
if文を使って条件ごとに異なるパーシャルを返したい場合があると思います。
しかし”html.erb”ファイルの中でif文を書くとどうしてもコードが長くなってしまいますよね。
例えばこんな風に、、、“`erb:sample.html.erb
<% if A == A %>
<%= render 'follow_button' %>
<% else %>
<%= render 'unfollow_button' %>
<% end %>
“`こんな時はヘルパーメソッドに処理をまとめるとスッキリします。⬇︎
“`ruby:users_helper.rb
module UsersHelperdef follow_unfollow_button(user)
if A == A
render ‘follow_button’
else
render ‘unfollow_button’
end
endend
“`ビューでhelperメソッドを使うと
【Ruby on Rails】便利なヘルパーメソッド
# はじめに
ヘルパーメソッドについて、[パーフェクトRuby on Rails 【増補改訂版】](https://gihyo.jp/book/2020/978-4-297-11462-6)を読んで個人的に学んだ内容をまとめます。# ヘルパーメソッドとは
ビューテンプレートで開発の手助けとなる便利なメソッド。HTML生成を行うものやURL生成するものなどがある。# パスとURLヘルパーメソッド
ルーティングを表示する際のPrefixの値+`_path`でドメインやポートなどを除いた/から始まるパスを、Prefixの値+`_url`とするとドメインなども含んだ完全なURLを返す。
パスに「:id」といった変動する値がある場合、引数にハッシュ形式で値を指定する。
url_forやlink_to、redirect_toでパスやURLを指定する際に使う。以下のルーティングの場合、次のようなパスやURLが返る。
**ルーティング**
“`
users GET /users(.:format) users#index
user GE
【Ruby on Rails】ajaxを使ってタグの追加と削除、(成功・エラー)メッセージの表示を行う。
## 環境
Ruby 2.5.7
Rails 5.2.4### ライブラリ
jQuery 1.12.4### 前提
今回はTagテーブルを使って解説していきます。まずはajaxを使わなくてもタグの追加と削除ができることを事前にご確認ください。
エラーメッセージの日本語化やアソシエーションについては触れませんので必要な方はご自身でお願い致します。
turbolinksは無効にしています。(有効時の動作は確認していません。)
## 手順
タイトルにもある通り、次の手順でajaxを利用してタグの追加・削除・エラーメッセージの表示を実装していきます。1.tag.rbにバリデーションの設定
2.部分テンプレートの用意(`views/layouts/_error_messages.html.erb`, `views/layouts/_flash_messages.html.erb`, `views/tags/_tag.html.erb`)
3.タグの一覧画面、兼新規作成フォームを作成(views/tags/index.html.erb)
4.アクションごとのjs.erbを用意
Ubuntuでrails6環境構築時、bundle installで引っ掛かる
##環境構築を終えて、bundle installするときに、色々引っ掛かる
OSはWSL1 Ubuntu(18.04)
こちらを参考に進めていきました。
>[(Ubuntu)Ruby on rails 6.0 環境構築](https://qiita.com/Gushi_maru/items/f3b5cc43e135e678085f)### nokogiriが通らない
“`
An error occurred while installing nokogiri (1.10.10), and Bundler
cannot continue.
Make sure that `gem install nokogiri -v ‘1.10.10’ –source
‘https://rubygems.org/’` succeeds before bundling.In Gemfile:
rails was resolved to 6.0.3.3, which depends on
actioncable was resolved to 6.0.3.3, which depe
Rack::Timeout でパスごとにタイムアウトを指定する
[rack-timeout](https://github.com/sharpstone/rack-timeout) を使用しておりパスごとにタイムアウトの指定を変更するため以前(rails 5.2.3、 rack-timeout 0.5.1 まで)は以下のように指定していました(多少簡略化してあります)。
“`Gemfile:Gemfile
gem ‘rack-timeout’, require: ‘rack/timeout/base’
“`“`ruby:config/initializers/rack_timeout.rb
module Rack
class DynamicTimeout < Rack::Timeout def call(env) # URL が /admin から始まる場合は 30 秒、それ以外は 10 秒となるように @service_timeout = env['REQUEST_URI'].start_with?('/admin') ? 30 : 10 super(env) end en
ルーティングのネストによって起きていること
動作環境
Ruby 2.6.5
Rails 6.0.3.2ルーティングのネストによって何が起きているのかがわかりづらかったので、自分の確認を兼ねて投稿してみました。
##ルーティングのネストをした場合
“`ruby:routes.rb
Rails.application.routes.draw do
resources :hoges do
resources :fugas, only: [:index]
end
end
“`
上記のコードでは、hogesに対してfugasがネストされており、ターミナル上でrails routesを実行すると、以下のようになります。Prefix ➡︎ hoge_fugas
Verb ➡︎ GET
URI Pattern ➡︎ /hoges/:hoge_id/fugas(.:format)
Controller#Action ➡︎ fugas#indexもちろん、上記以外も表示されますが今回はネストの箇所のみを扱います。
これだけだといまいちわかりづらいので、ルーティングのネストをしていない場合と比較していきます。##
Railsコマンドが正常に操作しない時疑うべきはspring
#動機
Railsを用いてテストコードを作成中に以下のコマンドを打つと正常に動作しなくなったので備忘録としてどのように解決したかを記述“`
$ rails g rspec:request articleRunning via Spring preloader in process 15349
Deprecation warning: Expected boolean default value for ‘–orm’; got :active_record (string).
This will be rejected in the future unless you explicitly pass the options `check_default_type: false` or call `allow_incompatible_default_type!` in your code
You can silence deprecations warning by setting the environment variable THOR_SILENCE_DEPRECA
[Rails]カスタムフォントの設定
# はじめに
アプリ開発でフリーフォントを使用してデザインを変えたのでその使用方法をまとめました。# 目次
1 フリーフォントの準備
2 フォントの読み込み# 1 フリーフォントの準備
まず、フリーフォントサイトから自分が使用したいものをダウンロードします。
その後、ダウンロードしたファイル(拡張子ttfまたはotf)をapp/assets/fonts下に配置します。### 注意事項
フォントはそれぞれ利用条件が異なります。商用可能であっても利用できる範囲に制限があったり、使用時に報告が必要なものもありますので、ご利用の際には必ず配布ページをご確認ください。# 2 フォントの読み込み
CSSファイルに以下を記述します。“`css
@font-face {
font-family: “abcdefg”;
src: url(‘/assets/abcdefg.ttf’) format(“truetype”);
font-weight: normal;
font-style: normal;
}
“`フォントを適用したい箇所にfont-family
[初学者向け]削除機能の実装方法
## 投稿内容
今回は削除機能の実装方法について投稿します。
以下のようなボタンを押した際に`destroyアクション`を発動させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/684d1694-c57e-4f1b-0148-af58d5e04598.png)## コントローラーのアクション
“`items_controller.rb
class ItemsController < ApplicationController #省略 def destroy if @item.destroy redirect_to root_path else render :show end end end ``` 解説) destroyアクションが呼ばれたらインスタンス変数`@item`を削除します。無事削除できた場合は`root_path`へ遷移。削除できなかった場合は`showアクション`へ遷移するようハンド
【Ruby】メソッドジャンプをしたい!
### はじめに
>環境macOS Catalina10.15.5
Rubyで他の人が書いたソースコードを読むときにメソッドの定義場所がすぐわかるようにメソッドジャンプがしたいなと思い、いろいろ試してたどり着いた方法を書き記します
私はテキストエディタはAtomを主に使っていたのですが、RubyのコードをAtomでメソッドジャンプするのは、いろいろ試しましたがうまくいきませんでした、なので
####結論 VSCodeを使うのが簡単
という事になりまりました
###導入手順
####1.こちらでVSCodeをダウンロード
https://azure.microsoft.com/ja-jp/products/visual-studio-code/####2.日本語化
– メニューバーからviewを選択
– command palette を選択
– configure display languageを選択
– install additional languageを選択
– Japanese Language Pack for Visual Studio Code
【Rails】ビューファイルは使わず、パラメータIDも存在しない中で、アソシエーションのデータを取得する。【APIモードで使う】
## はじめに
備忘録です。ここでは、ホーム画面(”/”)で
* `「データ全件」`
* `「1つのデータに関連付けされているデータの総数」`
* `「1つのデータに関連付けされているハッシュのデータ」`を表示させたいとして、indexアクションにて上記のデータを取得する方法について見ていきます。
例えばQiitaのようなアプリケーションを作成するとするならば、* `「記事全件」`
* `「1つの記事に関連付けされているコメントの総数」`
* `「1つの記事に関連付けされているタグのハッシュデータ」`を取得していくようなイメージです。
`全てのデータはハッシュとして取得します。`
## 環境
Ruby: 2.6
Rails: 5.2## モデルの例(作成の過程は省略)
![スクリーンショット 2020-09-28 23.12.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606750/27fc22be-fca1-58f4-adbb-a68dc3aa01da.png)
[rails6.0.0]ウィザード形式でActiveStorageを使用して画像を保存する方法
## 概要
ユーザー登録とプロフィールをさせる時に、ウィザード形式でフォームを作成。
プロフィールに画像を保存したかったが上手くいかなかったため備忘録として記載。
※検索しても同じ状況の方がいなかったので役に立てばと思います。ウィザード形式とは何か?という方は[こちらを参考にしてください](https://qiita.com/ATORA1992/items/40fc543742a6df5a17c1)
## 内容
##### 開発環境
MacOS Catalina 10.15.6
Rails 6.0.0
Ruby 2.6.5#### テーブル構成
deviseを使ってユーザー登録をさせようとしています。
userテーブルはnicknameのみ追加。
profileテーブルにはtwitterのリンクなど記載。
profileテーブルにactive_strageで画像を保存したい。### ウィザード形式を実装
ここらへんの機能の実装に関しては
[こちらの記事](https://qiita.com/Tatsu88/items/7447a669b788b011e96b)がかなり近