Rails関連のことを調べてみた2019年11月14日

Rails関連のことを調べてみた2019年11月14日

簡潔にflashメッセージを実装する。

#基本の書き方

コントローラー

“`ruby:xxx_controller.rb
if article.save
flash[:success] = “成功したよ!”
redirect_to root_path
else

“`

ビュー

“`xxx.html.haml
= flash[:success]
“`

これでsaveが完了したら、フラッシュメッセージが表示されるようになったよ!
やったね!!

大参考
>https://www.pikawaka.com/rails/flash

元記事を表示

ActsAsPublishable 作ってみた

公開フラグの立ってるものだけを取るのをうまいこと書きたかったので、[acts_as_paranoid](https://github.com/ActsAsParanoid/acts_as_paranoid)をまねて作ってみた。

`:disabled` はコントローラから有効無効を制御する用。
(↑ユーザー権限が管理者のときは全部出したいなどという目的)

Rails素人にはこれが限界。

“`ruby:ActsAsPublishable
module ActsAsPublishable
thread_mattr_accessor :disabled

module Publishable

def published?
self.published_at.present?
end

def self.included(base)
base.extend ClassMethods
end

module ClassMethods

def published_default_scope

元記事を表示

メモ(YAML関連)(シードファイル・フィクスチャファイル)(スキーマも)

テストを書く際に、使用するYAMLの書き方がわからなくなったので整理してみた。
関連づけがある場合どうすりゃえんや

ActiveRecord経由でDBに接続するには、
config/ymlで

##YAMLとは
構造化データの記述に適したファイル形式
構造をインデントや、記号で表現する

パラメーター名:値
の形式で表すのが基本

例えば

“`ruby:
production:
database: db/production.sqlite3
“`

これはproductionパラメータのサブパラメータdatabaseを表す。
値はdb/production.sqlite3

インデントは必ず空白で表現する(一般的には半角スペース二つ)

##シードファイルとフィクスチャ
スキーマ用意後 → データを初期化する必要性
 ここで、データを初期化するために、シードファイルか、ファイクスチャと言う二つのアプローチを提供

・フィクスチャは**テストデータの投入**に使う
・シードは**マスターテーブルの初期データを投入**するために利用するのが基本

##シードファイル
単な

元記事を表示

rail チートシート ルーティング編

ルーティングについて一括で見れるチートシートが欲しいので
作ることにしました。

# 基本

“`ruby:config/routes
Rails.application.routes.draw do
get ‘homes’ => ‘home#index’
get ‘homes/new’ => ‘home#new’
post ‘homes’ => ‘home#create’
end
“`

# ルート

“`ruby:config/routes
Rails.application.routes.draw do
root ‘homes#index’
end
“`

# resourcesメソッド

“`ruby:config/routes
Rails.application.routes.draw do
resources :items #items_controllerに対してのresourcesメソッド
resources :users, o

元記事を表示

rails 発展その14 あいまい検索

検索機能についてあいまいだったので
改めてその備忘録を書きます。

# LIKE句
LIKE句は、曖昧(あいまい)な文字列の検索をすることができるもので、whereメソッドと一緒に使います。

基本はこちら

“`ruby:controller
モデルクラス名.where(‘検索するカラム名 LIKE(?)’, “検索するキーワード”)

# 例
def search
@products = Product.where(‘title LIKE(?)’, “%#{params[:word]}%”).limit(5)
end
“`

%と_の意味はこんな感じ

| 文字列 | 意味 |
|:–|:–|
| % | 任意の文字列(空白文字列含む) |
| _ | 任意の1文字 |

サンプルだとこのような形になります

| 実行例 | 詳細 |
|:–|:–|
| where(‘title LIKE(?)’, “A%”) | Aから始まるタイトル |
| where(‘title LIKE(?)’, “%B”) | Bで終わるタイトル |
| whe

元記事を表示

ActiveRecord単体でbelongs_to でoptional: trueを有効にする

Rails 5.1から“`belongs_to“`を指定した時、自動的に“`required: true“`オプションが追加されpresenseのバリデーションが走るようになったことを今知った(https://github.com/rails/rails/issues/34454 )のですが(同時にrequiredオプションは非推奨になったようです)。

そして、新たに“`optional“`というオプションが追加され、その名の通り、これをオンにすると、presenseのバリデーションを追加しないように指定できるというもの。

要は、

“`ruby
class Book < ActiveRecord::Base belongs_to :author, optional: true end ``` としておけば、```Book.new author: nil```としても、検証はパスするようにできるということ。 これをRailsでなく、ActiveRecord単体で使おうとするとうまくいかなかった。調べてみたら、この機能はRailtieがRailsの初期化プロセ

元記事を表示

herokuにrails + mysql2 をデプロイするときの注意

追記

こちらに書きました。
https://dev.to/n350071/a-trap-point-at-push-your-rails-app-to-heroku-which-uses-mysql-14j

だいたい、[herokuでMySQL環境作ってやんよ!!!](http://tokidoki-web.com/2018/06/heroku%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AEcleardb-mysql%E3%82%92/)の内容で行ける。

ただし、Railsの場合は、`mysql://`のところを`mysql2://`としないとハマるので注意が必要です。

この質問に感謝。
https://teratail.com/questions/189312

元記事を表示

【Rails】seeds.rbで躓いたこと

*「エラー文に解決法はちゃんと書いてあるから、よく読みましょう」と、言いたい気持ちはよく分かります。
実際仰るとおりで、ごもっともです。
しかし、初心者というものはエラー文のヒントの見つけ方すら分からないのです。*

*まるで英文を和訳するかのような、丁寧な記事も時折拝見します。
何度助けられたか分かりません。*

*「もうこれは当然だから割愛します」という概念を捨てて、備忘録として、どなたかのお役に立てるよう記録します。*

#seeds.rbに触れてみました
開発にあたり便利だとは思いつつ、使いこなせるどころか触れられてもいなかったので活用してみます。
今回は食品データ(食品名、エネルギー、タンパク質、脂質、炭水化物の値)を登録して扱えるようにします。

###そもそもseedとは
DBに初期データを投入するためのタスクのこと。
以下の手順で行います。

– db/seeds.rbの編集
– rake db:seedの実行

試しにテストユーザーを作成してみます。

###テストユーザーを作成

“`ruby:seeds.rb
User.create!(
last_n

元記事を表示

Rails インクリメンタルサーチの実装

# まえがき
インクリメンタルサーチを実装するにあたって結構な時間を費やしてしまったので備忘録として書きます。実装をしてる方の役に立てると幸いです。
#インクリメンタルサーチとは
どんなサイトにも当たり前のように付いている機能ですが、検索フォームに文字を打ち込んだ際に、enterを押さなくても自動的に結果が表示されるものです。有名なもので言うと、googleの検索欄なんかがインクリメンタルサーチになっています。
#実装の流れ
・ルーティングを設定
・コントローラーにアクションを設定
・jbuilderの作成、記述
・フォームを作成
・発火させるようにjsに記述
・jsに追記
・modelにsearchメソッドを定義
・controllerに追記
・done関数の処理の記述
・非同期通信のビュー作成
・htmlをビュー上に描画

#ルーティングを設定

“`ruby:sample.rb
resources :samples, only: :index
collection do
get ‘search’
end
“`

今回はsearchメソッドをモデルで

元記事を表示

【Rails】 meta-tags と Cloudinary を使って動的にOGP画像を作る

今回[「Yuppeing-App」](https://yuppeing-app.herokuapp.com/)という質問箱風のアプリを作ったのですが、シェアボタンからTwitterにシェアした時に、もらった質問の文をTwitter Card に、その回答をTweet文にするという機能を実装したので、まとめてみました。

出来上がりはこんな感じです?

元記事を表示

初心者が独学で手を出して失敗したこと

WEB系企業に転職を目指し、独学で学習中です。
やらなければよかった、選択を間違えたという失敗談を記します。
※学習中のため、失敗が増えるたびに更新します。

#PCにコストをかけすぎた(かも)
WEB系ならmacbook!ということで、何はともあれmacbook airをメモリ増設で発注しました。
macという選択肢は良かったのですが、増設により届くまで1週間ほどかかりました。
(届くまでの間はprogateをやっていました)

オーバースペックだったかもしれません。
あと、選ぶのに時間をかけすぎました。

####macならなんでも良かった気がします。

(windowsをベースに解説してある書籍が意外と多いので、人によってはwindows PCでも問題ないかもしれません)

#Rubyから始めたのに、PHPに手を出した
地方在住・年齢(アラフォー)・独学という悪条件があったため、途中でPHPに一旦切り替えましたが、学習の進捗がかなり難航しました。

テキスト選びに失敗したのかもしれませんが、2019年時点ではRubyの方がPHPより「定番」と言われる学習ツールが充実しており、か

元記事を表示

【Rails】Polymorphic Associationsに少々苦しんだ話

## 1. 環境

* rails 5.2.3
* ruby 2.6.2
* MacOS Version 10.14.6
* 検索フォームgemは `virtus`

## 2. 要件

業務システムの自動メールイベント履歴一覧画面に「名前」(ユーザー名、拠点名)の検索項目を追加。

## 3. テーブル構造

※ 一部カラム割愛、テーブル名・レコードの値を改変

### 3-1. mail_events(メールイベント)

|id |email |
|:–|:——————|
|1 |user@example.com |
|2 |office@example.com |

### 3-2. mail_event_sent_to(メール送信先)

|id |mail_event_id |type |holder_id |office_id |
|:–|:————–|:——–|:———|:———|
|1 |1 |User |1

元記事を表示

#Rails で options リクエストに対して ルーティングする例

# 注意

OPTIONS request の役割とか考えてない例

# routes.rb

こんなん

“`
Rails.application.routes.draw do
root to: ‘roots#main’, via: :options
“`

# controller

“`rb
class RootsController < ApplicationController def main head 200 end end ``` # curl で確認 ``` curl -s -v -X OPTIONS http://localhost:3000/ ``` # rspec ちなみに rspec で options のリクエストをする方法がわからんとです。 # Original by Github issue https://github.com/YumaInaura/YumaInaura/issues/2715

元記事を表示

Rails5系にReactを導入する

## Webpackerを使う
gemの追加

“`ruby:Gemfile

gem ‘webpacker’
gem ‘react-rails’
“`
インストール実行

“`
$ bundle install
$ rails webpacker:install
$ rails webpacker:install:react
$ rails generate react:install
“`
*ここでbundle install できない場合は**$ gem update –system**したりしてみる。

インストールが無事完了したら以下追記。

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

<%= javascript_pack_tag 'application' %>
“`
コンポーネントの生成

“`
$ rails g react:component HelloWorld greeting:string
“`
app/javascript/componen

元記事を表示

Rails で module とか method とかの定義場所を知りたい時の魔法

# 迷子

> 「この module/method の定義場所を教えてください」

## 解決方法

`source_location`
というメソッドで場所を特定します。

以下、使い方

### method の定義場所が知りたい

この場合は、 `new` というメソッドの場所

“`
pry(main)> ‘hoge’.method(:new).source_location
“`

### module の定義場所が知りたい

この場合は、 `Hoge::Fuga` というモジュールの場所

“`
pry(main)> Hoge::Fuga.new.method(:dump).source_location
“`

## 終わりに

これがあれば、自分が定義した(つもりになってる)
method/module がちゃんと定義できてるかってところまで、確認ができますね!!!

したつもり、ってのが一番危険

## 参考
[Rubyでメソッドの定義場所を見つける方法](https://qiita.com/jnchito/items/fc8a61b421d026a23f

元記事を表示

Rails gem bcryptの導入

# Userモデルを作る
Database設計

|意味|Column|Type|Options|
|:-:|:—-:|:—:|:—–:|
|名前|name|string|null: false|
|メールアドレス|email|string|null: false, unique: true|
|パスワード|password_digest|string|null: false|

__userモデルを作成する__

“`:ターミナル
$ rails g model user name:string email:string password_digest:string
invoke active_record
create db/migrate/xxxxxxxxxxxx_create_users.rb
create app/models/user.rb
“`
# migrationファイルの編集
“`ruby:db/migrate/xxxxxxxxx_create_users.rb
class CreateUsers

元記事を表示

【Rails】Ruby on Railsで時間を15分単位で丸める、区切る【初心者メモ】

# rounding gemを使う

“`ruby:Gemfile
gem ‘rounding’
“`
“`
bundle install
“`

“`
Time.current
# => Wed, 13 Nov 2019 15:31:30 JST +09:00

Time.current.floor_to(15.minutes)
# => Wed, 13 Nov 2019 15:30:00 JST +09:00
“`
floor_to無し
Wed, 13 Nov 2019 15:31:30 JST +09:00

floor_to有り
Wed, 13 Nov 2019 15:30:00 JST +09:00

00分、15分、30分、45分で区切られて、はみ出した分は切り捨てられる。
上記は31分30秒の30分以降が切り捨てられて、30分00秒になる。

15.minutesの部分を変えれば、好きな時間単位で丸められる。
例えば、10.minutesにすれば10分区切りに

元記事を表示

docker-compose build が重い、イメージサイズが大きすぎるのって .dockerignore で解決できる? #docker #rails

# .dockeriignore

噂に聞いた話レベルだが、本当に効果があった。

.docker-compse.yml と同じディレクトリに .dockerignore を設置して、不必要なディレクトリを無視してやる。

“`
/log
/vender
“`

まだ概要把握中。

# 別の方法?

logディレクトリなどをマウントしない方法もあるみたいだけど、これだとマウントされなくなってしまうしな。

[docker-composeを爆速にする – Qiita](https://qiita.com/shotat/items/57d049793605ffc20135)

>Rails開発等でdocker-composeを使うと非常に遅い場合があります(特にDocker For Mac)。
docker-compose時に余計なファイルをマウントしてしまってるのが原因らしいので、.git, log, tmp, vendor >などのホストからマウントする必要のないディレクトリを別のvolumeでマウントを上書きしてしまえば解消されます。

“`yml
version: ‘3’
s

元記事を表示

#Ruby or #Rails で Date の月同士を比較計算したいのだが?

愚直に頑張るしかないのかもしれない。

“`
(date2.year * 12 + date2.month) – (date1.year * 12 + date1.month)
“`

[Find number of months between two Dates in Ruby on Rails – Stack Overflow](https://stackoverflow.com/questions/9428605/find-number-of-months-between-two-dates-in-ruby-on-rails)

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2712

元記事を表示

Rails5.2.3でjQuery導入

## jQuery導入手順

gemfileに記述

“`:Gemfile
gem ‘jquery-rails’
gem ‘jquery-ui-rails’
“`

“`
bundle
“`

application.jsに記述

“`application.js
//= require jquery
//= require jquery_ujs
“`

**リロードしないと機能しない場合**

Gemfile の gem ‘turbolinks’ をコメントアウト
application.js の//require turbolinks を削除
“data-turbolinks-track” => “reload”(application.html.erb)
とする。

**個別ファイルの読み込み**

application.jsに記述
“`
//= require_tree .
“`

元記事を表示

OTHERカテゴリの最新記事