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

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

Railsチュートリアル 第13章 ユーザーのマイクロポスト – Micropostモデルに、テスト駆動で新たな機能を追加していく

# 空文字列での投稿は受け付けない

## 「空文字列で投稿した場合、Micropostオブジェクトは有効ではない」というテストを追加する

「空文字列で投稿した場合、Micropostオブジェクトは有効ではない」とすれば、上述の機能は実現されます。対応するテストは、以下のようになります。名前は「content should be present」とします。

“`ruby:
test “content should be present” do
@micropost.content = ” ”
assert_not @micropost.valid?
end
“`

上記テストを`test/models/micropost_test.rb`に追加します。

“`diff:test/models/micropost_test.rb
require ‘test_helper’

class MicropostTest < ActiveSupport::TestCase def setup @user = users(:rhakurei)

元記事を表示

RailsアプリをECS FargateへデプロイするCI/CD pipelineを構築する

この記事は[Fusic Advent Calendar 2019](https://qiita.com/advent-calendar/2019/fusic)の20日目の記事です。

昨日は@Kta-Mの「[究極のCloudFormationをたずねて三千里](https://qiita.com/Kta-M/items/53bfd638eae21b76250f)」でした。
CloudFormationでこのネタをやるとは、、、斬新なアイディアですね。

—-
さて、12月2日〜6日にアメリカのラスベガスで[AWS re:Invent 2019](http://reinvent.awseventsjapan.com/)が開催されました。
私自身も参加して多数のWorkshopを体験することができました。

今回は、その中で最も実用的と感じたWorkshopの内容を、一部アレンジしてre:Playします。

## 作るもの

ECS Fargate上にアプリケーションをデプロイするCI/CD pipelineを構築します。
ECSは2つのサービスを起動し、Blue/Greenデプロイで

元記事を表示

[WIP]ActiveRecordを使って複数テーブルへBULK INSERTする方法

# 目的
– Qiitaの記事に大まかな流れをテンプレート化しておき、作業効率を上げる。
– 今後、railsを学ぶ方に向けての参考に役立てる。

# 前提条件
– 実行環境
– Ruby 2.5.1
– Rails 5.2.3
– MySQL 5.7

– gem
– [activerecord-import](https://github.com/zdennis/activerecord-import)

– 想定
– 大量のデータ(CSVファイル)をseedで一括で取り込みたい

# 手順
1. CSVファイルを設置する
2. seeds.rbにCSVをBULK INSERTするコードを記述
3. 各modelにオプションを設定
4. `rails db:seed`(完)

## 1. CSVファイルを設置する

“`tex
db
├── data
│   ├── hoge.csv ← 初期データとして取込みたいCSVファイルを設置
│   └── fuga.csv ← 初期データとして取込みたいCSVファイルを設置
├── m

元記事を表示

RailsでJSON REST APIを実装する(GET編)

# 背景

現在、RailsのapiモードでJSON APIサーバを開発している。
RESTful APIの原則に従い、各種リソースに対する`GET`、`PUT`、`POST`、`DELETE`を実装している。

今回はGETの実装について書きます。

# やりたいこと

クエリパラメータでリソースの属性を指定し、条件に合うリソースを全てGETするJSON APIを実装したい。

“`
GET /staffs?store_id=12345678&gender=male&grade=professional
“`

クエリパラメータには `store_id`、`gender`、`grade` を設定できる。

全てのパラメータを記述しなくてもよく、任意のパラメータだけでリソースを絞ることを可能にしたい。

# 少し悩んだ点

例えば、

“`
GET /staffs?store_id=12345678
“`

というリクエストが来た場合、 `params[:gender]`と`params[:grade]`は`nil`になってしまうため、モデルの検索条件から省いてやらなければなら

元記事を表示

【Rails5.2.4】rails newしたらsass-railsとsprocketsのバージョンが合わなくてエラー発生

## はじめに
Rails+Vue.jsの環境構築をしていたときに発生した単純なエラーについて解決法を残します。

## 環境
“`yaml
OS: macOS Catalina 10.15.1
zsh: 5.7.1
Ruby: 2.6.5
Rails: 5.2.4.1
“`
## エラー内容

“`shell
$ rails new
…略
Resolving dependencies….
Bundler could not find compatible versions for gem “sprockets”:
In snapshot (Gemfile.lock):
sprockets (= 4.0.0)

In Gemfile:
sass-rails (~> 5.0) was resolved to 5.1.0, which depends on
sprockets (>= 2.8, < 4.0) rails (~> 5.2.4, >= 5.2.4.1) was resolved to 5.2.4.1, which de

元記事を表示

Rspecつまづきポイント!

この記事は[Ateam Hikkoshi Samurai Inc. & Ateam Connect Inc. Advent Calendar 2019](https://qiita.com/advent-calendar/2019/hikkoshi) 20日目の記事です。

# はじめに
ここ一年ほど、社内で自動テスト推進係をしております@ysysysysがお送りいたします。
社内の各プロジェクト、特にRailsプロジェクトでRspecを書きましょうと皆さんとともに日々頑張っております。
今回はRspecを書いていく中で個人的につまづきポイントだったなと思うところをいくつかピックアップしてその対応をご紹介しようかと思います。

# その1 let と let!
Rspecではletという機能があります。Spec内ではインスタンス変数で定義するよりもlet(:hoge)と定義するのが一般的なようです。
letをつかえば、その内容はメモリーされ、exampleのたびに再生成するコストが減るとのこと。
ここでつまづいたのが、このletが**遅延評価**するという特性による挙動です。

“`

元記事を表示

「rails server」コマンドを読み解く

#「rails server」コマンドを読み解く

##前置き
本記事の内容はタイトルのまんま。`rails server`コマンドを叩いた際に一体何が実行されているのかを調べてみた。内容的に、対象者は初心者以上中級者未満。多分。なお、調べながら記事を書いていたので、説明の流れが下手くそな部分があるがそこは許してンゴンゴ。

※Rackについて詳しい人は得るものないかもしれませんがご了承ください。

##バージョン
ruby 2.6.3
Rails 6.0.1

##準備
多分そんなに必要ないけどRails newしてアプリを作成。

“`terminal
$ rails new adc2019
“`

からのbundle install

“`terminal
$ bundle install
“`

コントローラも作成してルートを通しておこう。

“`terminal
rails g controller home
“`

“`routes.rb
Rails.application.routes.draw do
get ‘/’, to: ‘home#homw’

元記事を表示

RailsロガーからStackdriverに切り替える

# はじめに

* **当該記事はたたき台のため、追記予定**

### システム情報
* Ruby 2.6.5
* Rails 5.2.3
* bundler 1.17.2
* puma
* rbenv local環境下

“`text:Terminal
$ rbenv versions
system
2.4.1
* 2.6.5 (set by /Users/%user%/%repository%/.ruby-version)
$ bundle exec rails -v
Rails 5.2.3
“`

# Stackdriverに切り替える

## これまでの構成

* Rails.loggerのformatterを `config gem` で環境毎に設定(或いは `settings.yml` でも良い)

“`yaml:config/settings/development.yml
…途中省略…
# logging setting
# fatal システムクラッシュ(システムエラー)
# error アプリケーションエラー
# warn 警告
# i

元記事を表示

俺たちは雰囲気でAdminLTEを使っている

# はじめに

※この記事は、「RUNTEQ Advent Calendar 2019」、19日目の記事です。

普段、Webサービス・アプリのUIデザインを仕事としてやっているのですが、管理画面の制作は、エンジニアの誰かが良しなに対応してくれているだけという状況がかなり多いです。

社内のRailsエンジニアと話していたときに、「AdminLTEなんかもっといい感じに使えたいんだよね」というお悩み相談を受けたことがあります。
今回は、AdminLTEを使用する際に持っていると助かりそうな知識と、ちょっとしたテクニックをまとめてみました。

デザイナーがいないプロジェクトでも、CSSフレームワーク等を用いてせっせと管理画面をつくってくれている、最高のエンジニアの方々のお役に立てたら最高です。

# AdminLTEとはなにか

AdminLTEは、Bootstrapベースでつくられた、管理画面作成などに特化したCSSフレームワークです。
これから使うならバージョン3以降がおすすめです。

骨組みはBootstrapで、それにスタイリングを加えて、サンプルも提供してくれているものがAdm

元記事を表示

Rails, Dockerのマルチステージビルドに失敗した時の対応

## 問題
– dockerのマルチステージビルドにて`bundle install`の内容をコピーしていた
– `COPY –from=builder /usr/local/bundle /usr/local/bundle`
– ここについての詳細は、Railsのdockerイメージを小さくする方法などで調べてください
– `Bundler 2.1.1`, `RubyGem 3.1.1`がリリースされたことで、dockerビルド時のバージョンが勝手にアップデートされ、Railsが起動できなくなった

## 対応
– `/usr/local/lib` もコピーする

“`Dockerfile
COPY –from=builder /usr/local/lib /usr/local/lib
COPY –from=builder /usr/local/bundle /usr/local/bundle
“`

## 詳細
### エラーの詳細
– nokogiriなどの `with native extension` なgemが全て読み込まれなくなっていた

元記事を表示

あっさり読むrails①(image_tag)

#はじめに
railsにおける`image_tag`の使い方を、極めてあっさり書いてみようと思います。
コードはHamlで書きます。
#実行
`image_tag`は画像を表示するためのrailsヘルパーメソッドです。
例えば次の様に書きます。

“`haml
= image_tag src = “画像のアドレス”
“`

大きさや位置を指定したいなど、classをつける必要がある場合は次の様にします。

“`haml
= image_tag src = “画像のアドレス”, class: “クラス名”
“`

元記事を表示

画像の複数投稿??プレビュー表示??え??

## 〇〇エキスパートにて
どうも、pirikaraです。
チーム開発にて某メルカリのクローンサイトを作成中、商品出品の画像投稿で詰まりました。
プレビューは表示されるのにデータが入ってない・・・・・・
プレビュー消したのにデータが残っている・・・・・・
など散々格闘したので、参考になればと思って書きました。

10月からプログラミング学習を開始した弱々エンジニアですので、お手柔らかによろしくお願い致します。

こんなやつ作ります(個人アプリで作ったやつです)
![21jfi-uf4mh.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493565/4e9212a5-846b-5b5f-b6a5-340454bd3a20.gif)

## 仕様
1. 画像を10枚投稿できる
2. 投稿した画像は1枚ずつプレビューされる
3. 5枚目以降は2段目にプレビュー表示される
4. 削除を押すとプレビューから消える
5. 追加・削除したプレビューとfile_fieldの中身が同期している

## やってみよう
まず

元記事を表示

[初心者]DockerによるRails環境の構築(Windows)

初心者向けのDockerによるRails環境の構築です。
また、OSはWindowsです。

Windowsユーザーは、この環境構築の段階でとても苦しみますよね:sob:
私もとても時間がかかりました……

この記事がそういった方々の参考になれたら嬉しいです:v:
# 目次
– [Docker for Windowsのインストール](#docker-for-windowsのインストール)
– [Docker Toolboxのインストール](#docker-toolboxのインストール)
– [Rails開発環境構築用ファイル](#rails開発環境構築用ファイル)
– [Docker Toolboxをお使いの場合の注意点](#docker-toolboxをお使いの場合の注意点)
– [Railsの環境構築](#railsの環境構築)

##Docker for Windowsのインストール
>Dockerの公式サイトURL https://www.docker.com

以下の順に進める。

1.Product
2.GET DOCKER COMMUNITY EDITION
3.

元記事を表示

ActiveModel::Attributesを使う

ここでは、Rails 5.2で導入された[ActiveModel::Attributes](https://github.com/rails/rails/blob/master/activemodel/lib/active_model/attributes.rb)について紹介します。RubyのクラスにActiveRecordのカラムのような属性を加えられます。

サンプル:
https://github.com/kazubon/blog-rails6-vuejs/blob/master/app/forms/entries/form.rb

クラスにActiveModel::ModelとともにActiveModel::Attributesをインクルードします。

“`ruby
class Entries::Form
include ActiveModel::Model
include ActiveModel::Attributes
“`

クラスメソッドattributeに属性名と型を渡すと、attr_accessorと同じように属性が使えるようになります。指定できる型の種類

元記事を表示

○witterもどきのアプリでハッシュタグ機能を実装してみた。

##はじめに
どうも、Pirikaraです。
今回は適当に作った○witterもどきのアプリで、ハッシュタグ機能を実装してみたので共有したいと思います。

##まずはrails new
まずはT○itterもどきのアプリを作ります。
tag機能を実装するので、rails newでtag_appを作ります(適当)

tweetモデルとtagモデルを作成しますが、
両者は多対多の関係なので、中間テーブルとしてtweet_tagモデルも作っておきます。

“`ruby:tweet.rb
class Tweet < ApplicationRecord has_many :tweet_tags has_many :tags, through: :tweet_tags #写真の投稿も可能にするために、carrierwaveとminimagickを入れておいた mount_uploader :image, ImageUploader end ``` ```ruby:tag.rb class Tag < ApplicationRecord has_many :tweet_tag

元記事を表示

Protocol Buffers を使って、Rails の RESTful API をスキーマ駆動開発してみた

こんにちは、クラウドワークスの @t0yohei です。普段は Rails や Vue.js などを使って crowdworks.jp の開発をしています。
この記事は クラウドワークス Advent Calendar 2019 の20日目の記事です。

昨日は @juntetsu_tei による、[Rails更新は最低限Controllerのテストが欲しいというお話](https://qiita.com/juntetsu_tei/items/3bf793ae84191b86d6ac)でした。

今回は、Protocol Buffers を使った、 Rails の RESTful API はこんな感じに開発できるんじゃない?って内容です。実務で実際に使ったわけではないので、不足している点があると思いますが悪しからず。

## 用語の整理
### Protocol Buffers って?
Google が社内向けに開発を始めたツールです。2008年以降 OSS として公開されており、誰でも閲覧、 contribute することができます。https://github.com/protoc

元記事を表示

rails データ保存あれこれ

### 基本

new → view → controller

– 通常

“`ruby
def product_params
params.require(:product).permit(:name, :desc)
end
“`

### fields_for

“`ruby

“`

### 1対多で子要素もまとめて保存する

“`ruby

# prodcut.rb
def product_params
params.require(:product).permit(:name, :desc, production_conditions_attributes:[:name])
end

class Product < ApplicationRecord has_many :production_conditions has_many :somethings, as: :somethingable accepts_nested_attributes_for :production_conditions ``` ### ポリモーフィック

元記事を表示

Capistranoで自動デプロイ時に起きるエラーについて〜AWS〜

# はじめに
Capistranoを使って、AWSに自動デプロイをかけた時に出るエラーのお話
本件は主に再起動時に起きるエラーです
最後にデプロイ時に確認する事項をまとめていますので、そちらも軽くご参照いただければと思います

## Erroe内容
bundle exec cap production deploy実行後

“`terminal:terminal
Mac_ikuy:”hogehoge” User$ bundle exec cap production deploy
# terminated with exception (report_on_exception is true):
Traceback (most recent call last):
1: from /Use

元記事を表示

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

# はじめに
こちらは [Classi Advent Calendar](https://qiita.com/advent-calendar/2019/classi) 19日目の記事です。
こんにちは、Classi Webエンジニアの@hakshuです。

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

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

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

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

ただ、Rubyについては、動的型付けのため、補完

元記事を表示

(rails)特定の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の関数の外に変数を定義すると、どこでも使える変数

元記事を表示

OTHERカテゴリの最新記事