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

Rails関連のことを調べてみた2019年12月19日
目次

VSCodeの拡張機能でRailsと仲良くなる

# はじめに
こちらは [Classi Advent Calendar](http://hoge) 19日目の記事です。
こんにちは、Classi Webエンジニアの@hakshuです。

皆さんはRailsを書く時エディタは何を使っていますか?
RubyMine?Vim?Emacs?VSCode?Atom?さくらエディタ?

自分はフロント/サーバー関わらず、JavaScriptやTypeScriptなどを書くことが多かったので、Visual Studio Code、いわゆるVSCodeを愛用しています。

現在のプロジェクトでは、フロントエンド(Angular)/サーバーサイド(Rails)のどちらも書いており、いちいちエディタを切り替えるのも面倒で、使い慣れていることもあるので、VSCodeを使っています。

TypeScriptもVSCodeもMicrosoft製ということもありますし、静的型付けのため、補完はとても効くので、サクサク書いていくことができます。

ただ、Rubyについては、動的型付けのため、補完をいい感じに効かせるには拡張機能などでカバーが必要です。

なので、

元記事を表示

特定のview(url)でグローバル変数を定義

こんにちは!

この前個人アプリを作成しているときにjs(jquery)とgem ‘gon’について少しハマったのでご紹介しようと思います

なににハマったかと言うと、特定のビューの中で使用するjsの変数をグローバル変数として指定したく、jsのグローバル変数にgem’gon’で指定した値を代入したところ、アクションの外でエラーが出てしまい、他のjsファイルの実行の妨げになってしまったのです(ちょっと何言ってるかわかりづらくてすみません)

もう詳しい方ならこの一文を見ただけで察しはついているのではと思いますが、この時の状況と解決を簡単にご紹介します

# ‘gon’とは
railsのコントローラで定義した変数をjs内で使用できるようにしてくれるgemです
https://qiita.com/s_nakamura/items/5d153f7d9db1b1190296

# グローバル変数とは
“`〇〇.js
var test_global = hogehoge
$(function() {
//処理
});
“`
このようにjsの関数の外に変数を定義すると、どこでも使える変数

元記事を表示

Railsで特定のURLからのリクエストを許可してiframeを表示させたい、、、

#やりたいこと
Railsでiframeからのリクエストを許可して外部のサイトで表示させたい、、、
でもすべて許可するとなにかと怖いので特定のURLに絞りたい、、、

#ということで
Railsでは

“`ruby
response.headers[‘X-Frame-Options’] = ‘SAMEORIGIN’
“`
が設定されていて自身のドメインしかiframeで表示出来ないそう

今回は特定のURLのみ許可したいので以下のように実装

“`ruby
class HogeController < ApplicationController after_action :allow_iframe, only: [:hoge] def hoge render "hoges/index", layout: false end private def allow_iframe url = "https://hoge.com" response.headers['X-Frame-Options'

元記事を表示

新規アプリケーションをGithubで管理する(Rails)

# はじめに
Railsを使ってプログラミングの学習をしているのですが、新規アプリケーションを作成する際、Githubで管理する方法を忘れてしまうので、定着させる意味でも残したいと思います。

# 環境
OS: Mac
Rails 5.0.7.2
Ruby 2.5.1
MySQL
Github Desktop

# 手順
### 1,新規アプリケーションを作成

“`terminal:ターミナル
$ cd myapp #作成したいディレクトリへ移動
$ rails _5.0.7.2_ new my-blog -d mysql #Railsのバージョンを指定、DBはMySQLを指定する。
$ cd my-blog #作成したアプリケーションのディレクトリへ移動
$ rails db:create #データベース作成
“`

### 2,Github Desktopからローカルリポジトリにする
スクリーンショット 2019-12-18 1.24.07.pngオブジェクト指向設計を実践するためのまとめ

[Zeals Advent Calendar 2019](https://qiita.com/advent-calendar/2019/zeals) の19日目の記事です。

サーバサイドエンジニアの小寺です。私がまだ初学者に近かった頃、「もっと早く知っておけばよかった!」と心の底から思ったオブジェクト指向設計についての知識を書き残しておこうと思います。

今回は、実務で求められる「保守性の高い読みやすいコード」を実践するために
オブジェクト指向設計実践ガイドを学習し、理解できたところを自分なりに要点をまとめ・メモし、備忘録としたものです。
(※4章までの内容が理解できれば十分実践していけると思いますので4章までしかまとめてないです)

## 参考書籍
[オブジェクト指向設計実践ガイド](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A8%AD%E8%A8%88%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4

元記事を表示

railsでSQLログをapplicationログとは別に出力する

# railsでSQLログをapplicationログとは別に出力する

applicationログはinfoで出したいけど、別途SQLログも出したい時など

“`config/application.rb:ruby
ActiveRecord::Base.logger = Logger.new(‘log/sql.log’)
ActiveRecord::Base.logger.formatter = proc do |severity, timestamp, progname, msg|
{
timestamp: timestamp.iso8601,
LOG_LEVEL: severity,
message: msg
}.to_json << "\n" end ``` # 動作環境 rails 6.0.2 ruby 2.6.3

元記事を表示

Lineのやり取りをSlackに通知する

この記事は [GLOBIS Advent Calendar 2019 – Qiita](https://qiita.com/advent-calendar/2019/globis) の18日目です。

こんにちは、グロービスでエンジニアをしている @shifumin です。
皆さん、Lineを使っていますか? 僕は通知オフで使っています。理由は通知で集中力が切れるのが嫌だからです。
しかし、通知オフ設定だと送られたメッセージに長時間気づかずに怒られイベントがたまに発生しますよね? 僕はたびたび発生しています。
皆さん、Slackを使っていますか?使っていますよね。凝視していますよね。
Slackなら常に見ているから見逃さないんだけどなあ。

というわけで、多少矛盾を孕んでいますが、通知オフにしたLineで送られたメッセージをSlackに通知させるためのbotを作っていきたいと思います!

## 概要を3行で
– 通知させたいLineグループにLine botをjoinさせてLine Messaging APIでメッセージを取得する
– 上記で取得したメッセージをSlack botと

元記事を表示

[Rails6]ActionTextの入力フォームが伸びて困る

# はじめに
就活のポートフォリオサイトとして[Asobi](http://www.asobi-app.com/)というWebサイトを作成しました。(QiitaにAsobiに関しての記事を書いています。[就活用ポートフォリオとしてWebサービス「Asobi」を作りました。](https://qiita.com/sasakura_870/items/1eb666c80c4ceb815dd8))
このサイトの中でRails6から新しく導入された`ActionText`を使っているのですが、入力フォームが行数に応じて伸びてしまいます。

今回はそんなActionTextの入力フォームをいい感じにするためにやったことをご紹介します。

# 実行環境
+ Ruby 2.6.5
+ Rails 6.0.2

# ActionTextとは
Rails6から実装されたリッチテキストコンテンツと編集機能を導入する機能です。

ActionTextのインストールと導入したいモデルとカラムの用意を行い、少しコードを書くだけでブログのようなリッチテキストエディタが導入できます。

![actiontext_t

元記事を表示

【Rails】使用するレイアウトファイルを切り替える

デフォルトでは全てのviewファイルが`application.html.erb`をレイアウトとして利用するようになっています。
コントローラーやアクションごとに、使用するレイアウトを指定する方法を調べました。

##レイアウトファイル側から指定
レイアウトファイルの名前を`views/layouts/hoges.html.erb`にすることで、`hoges_controller`内の全てのアクションに適用されます。

##コントローラー側から指定
コントローラーの内上部に`layout ‘‘`と書き込むことで、そのコントローラー内のアクションで利用するレイアウトファイルを指定することができます。

“`rb:hoges_controller.rb
class HogesController < ApplicationController layout 'another' def index end . . ``` (レイアウトファイル名が`another.html.erb`の場合) ##アクションごとに指定 アクション内に`rende

元記事を表示

未経験が受託企業に入って半年経ったので、学んだスキル全部書いてみる

#はじめに 

今年2019年6月にエンジニアとして晴れてキャリアをスタートさせました。
それから約半年間で本当にいろいろなことを学ばせて頂いたので、私ごとですが簡単に学んだことをまとめます。

もちろんマスターなんてしておらず、全てが勉強中なうえ、なんならちょっとかじっただけのものまで書いてますので悪しからず。

一概に未経験といっても、自社開発/受託企業/SES企業、大手/メガベンチャー/スタートアップ、元IT業界/全くの素人、普段からパソコン触ってた/触ってない等いろいろなキャリアの始め方があると思うので、平均的な成長度合いなのかどうかは不明ですが、ほんの一例としてご参考ください。

■簡単な経歴

・良くも悪くもない普通の大卒
 パソコンスキルはitunesで音楽入れる程度
・某アパレルチェーン企業で3年ほど勤務
 内2年管理職
 パソコンスキルはWordで毎週報告書を書く程度
・2018/12〜  Mac購入
       某オンラインスクールで勉強開始
・2019/3〜 独学開始、都内もくもく会に週1参加、Menta契約、アプリ作成等
・2019/6〜 就職
・2019/1

元記事を表示

rails 部分テンプレート健忘禄

#rails ~render 健忘禄~

共通部分のレイアウトをまとめて一つのファイルにしてそれを使い回す際に用いられる

`code`
“`index.html.erb

“`
↑で記述したところに”_ファイル名.html.erb”のレイアウトが表示される。

– パスの部分は部分テンプレートのファイル名がインスタンス変数の単数形
– 部分テンプレートのファイル内で使う変数名が同一であること
この条件を満たしていれば

`code`
“`index.html.erb

“`

と記述することができる。

元記事を表示

Railsチュートリアル 第12章 パスワードの再設定 – 本番環境での動作に関する演習

# 1.production環境でユーザー登録を試してみましょう。ユーザー登録時に入力したメールアドレスにメールは届きましたか?

スクリーンショット 2019-12-17 12.38.59.png

まずは「Sign up」画面から、ユーザー登録に必要な情報を入力し、「Create my account」ボタンをクリックします。

スクリーンショット 2019-12-17 12.39.10.png

上記の画面が出て、入力したメールアドレ

元記事を表示

slim ちょっと試したいときには slimrb を使う

# 問題(やりたいこと)

slim のレビューをしていて、こんな書き方ができたような…ということを言いたいが自信がない。
とりあえず一行だけ slim を書いて、その書き方が合っているか確かめるにはどうするか。

# 解決策

ターミナルで下記のコマンドを実行する。これで標準入力の待ち状態に入るので適当な slim を書き込み Control+d を2回押す。(なぜ2回なのかはわからない)

“`terminal
bundle exec slimrb
“`

# 例

たとえば

“`terminal
bundle exec slimrb
div hoge
“`

のあと Control+d を2回押すと

“`

hoge

“`

が出力されて、正しい slim だったということがわかる。

元記事を表示

xray-railsはRails6だと動かないという話

# TL;DR

`xray-rails`gemを使っている方がRails6にアップグレードするときは要注意。

# 事の流れ

## 発端

プロジェクトをRails6に上げたところ、なぜか`image_tag`が動作しなくなりました。具体的には、`app/assets/images/exist.svg`みたいなファイルがあるのに、`image_tag ‘exist.svg’`がエラーを吐くようになりました。

## 調査

試しに新規にRails6アプリケーションを作成し、同じファイルをコピーして`image_tag`を使用したところ問題なく動作しました。この時点で該当アプリケーションと新規アプリケーションの差分が原因(ファイルや記法の問題ではない)ということはわかったものの、設定が問題だと思いこんでいたためどこが真の原因かを突き止めることができませんでした。

## ruby-jp

https://ruby-jp.github.io/

自力での調査を続けてもよかったのですが、正直疲れていた私はオンラインで質問することにしました。
幸い、`ruby-jp`というSlackコミュ

元記事を表示

【Rails】ITインフラ全体像をまとめてみた(DNSサーバーへの問合せ、リクエストからレスポンスの流れ)

#目的
RailsチュートリアルではMVCといったRailsアプリケーション特有の全体像については書かれていますが、それ以前の一般的なシステムのインフラについてはほぼ載っていないのが現状です。今回はそうした一般的なシステム全体像を含めて解説して、Railsの全体像について理解を深めていきたいと思います。

#流れ
①WebブラウザでURLをアクセスする時DNSサーバーを使ってドメインIPアドレスの取得作業を行う。

②DNSサーバーはIP アドレスを返す。

③ブラウザはサーバのIPアドレスにHTTPリクエストを行う。

④Webサーバーは静的コンテンツを見せて、動的コンテンツについてはAPサーバーに要求する。

⑤APサーバーがRailsで作成されたアプリケーションを実行して、ルーター(Route.rb)がリクエストをコントローラに振り分ける。

⑥コントローラーが動的なコンテンツについてはModelに行きデータベースとの通信を行い、必要な情報をデータベースから取り出し、コントローラーに返す。コントローラーがその情報を保存し、ビューに通信を行いHTMLを生成する。

⑦コントローラ

元記事を表示

ActiveRecordのメソッドとSQLの関係を基礎から理解しよう!

## 目標
* RailsのModelの中核を担うActiveRecordのメソッドと発行されるSQLの関係を理解すること
* includesやpluckといったメソッドを理解することで中級者レベルにステップアップすること

## 目次
* 用語
* 基本編
– 基本編解説
* 応用編
– 応用編解説
* まとめ
* さらに発展的な内容

## 用語

### RDBMS
**R**elational **D**ata **B**ase **M**anagement **S**ystemの略。その名の通りリレーショナルデータベースを管理するソフトウェアの総称で、データをカラム(列)と、レコード(行)の中にまとめ、それらを二次元のテーブル(表)の中に並べて表現するものです。データの取得や作成といった手続きにSQL言語が用いられます。代表的なものにはPostgresqlやMysqlなどがあります。

### ORM

ORMとはオブジェクトリレーショナルマッピングの略で、Rubyなどのオブジェクト指向言語では直接扱うことのできないRDBMS上のテーブルやデータを、クラスなどにマッ

元記事を表示

マイグレーションファイルのdef upとdef self.upの違いについて調べてみた

## 背景
社内のマイグレーションファイルにて、`def up`と`def self.up`が混在していたのでどちらかに統一すべく(そもそも統一すべきかどうかも含めて)、違いを調べてみた。
(正確には、調べてみたけどまだ途中です)

## 環境
ruby 2.6.3
rails 5.2.3

## やり方
適当なマイグレーションファイル内に`binding.pry`を埋め込んで挙動を確認する。

## def up
“`
class CreateUsers < ActiveRecord::Migration[5.2] def up binding.pry # ここに埋め込む create_table :users do |t| t.string :name t.timestamps end end end ``` 実行 ``` $ rails db:migrate == 20191020160206 CreateUsers: migrating ======================================

元記事を表示

Rails6 のちょい足しな新機能を試す112(database.yml warning編)

# はじめに

Rails 6 に追加された新機能を試す第112段。 今回は、`database.yml warning` 編です。
Rails 6 では、複数データベースに対応していますが、 `database.yml` ファイルで複雑なERBが使われていると警告が出るようになっています。

Ruby 2.6.5, Rails 6.0.1 で確認しました。 (Rails 6.0.0 でこの修正が入ったようです。)

“`shell
$ rails –version
Rails 6.0.1
“`

今回は、警告を出すために、 環境変数 DB によって、 MySQLデータベースかPostgreSQLデータベースにアクセスを切り変えるということで試してみたいと思います。
複数データベースの機能は使いません。

# Rails プロジェクトを作成する

“`shell
$ rails new rails_sandbox
$ cd rails_sandbox
“`

# Gemfile に mysql2 と pg を追加する。

MySQL と PostgreSQL どちらでも接続で

元記事を表示

.present?はnilかそうじゃないか、という場合は不要

キャンペーンコードから適用されるキャンペーンとプランに紐づくキャンペーンがあるんだけど、キャンペーンコードからのキャンペーンを配列の一番最初に表示させたかった時の実装。

辞書型(hash型)なのが注意。
`key`でキャンペーンコードからのものを探して一旦削除して`unshift`で先頭にpushしてるんだけどいまいち納得いってない。。もっといい方法ないのかな?

修正前

“`order_base_decorator.rb
def order_campaigns
c = options[‘campaigns’].to_a
cc = c.find{|x| x[“key”] == “campaign-code”}
c.delete(cc) if cc.present?
c.unshift(cc) if cc.present?
if c.present?
unless c.first == {} || cc
return c.unshift({}).to_a
end
return c

元記事を表示

Rails: exifにタイムゾーンがないからどんな感じで保存しようかなと思った話

[Classi Advent Calendar 2019](https://qiita.com/advent-calendar/2019/classi) の18日目、Railsアプリケーションエンジニアをやっている@HokotaMisakiです。

今回書くお話は**Classiではなく、自宅で作っている**野鳥観察記録サービスで体験したものなのですが、マニアックでピンポイントなケースだと思ったので紹介します(テーマ的にRails絡んでるからセーフだと思ってる)。

主に、exifにタイムゾーンの有り無しを確認することになった経緯についての話になります。

※ なおexifとは、画像の中に埋め込まれているメタデータのことです。位置情報や時刻、撮影カメラの設定情報などが保存されています。

# まずは結論から
この2つのあわせ技で行くことにしました。

1. ユーザに**自身のタイムゾーンを登録**してもらう
2. アプリケーションはユーザ毎のタイムゾーンで動き、時刻を**そのままアプリケーションのタイムゾーンで保存**する

#### 「えっ、exifらしさもないし、なんか普通・・・」

元記事を表示

OTHERカテゴリの最新記事