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

Rails関連のことを調べてみた2020年01月06日
目次

railsでurlを生成する方法 [:new, @user]

困った点

“`
link_to “リンク先”, [:new, @user]
“`
このリンク先を文字列として所得したい

解決策

“`
= url_for([:new, @user])
“`

元記事を表示

実務経験無しの私がRailsでwebサービスをリリースしてみた

都内にあるプログラミングスクール「TECH::EXPERT」を先日卒業し、現在転職活動中のユウマ(@yuma11)です。

2019/12/21からRailsを使ってオリジナルのwebサービスを開発し始め、2020/1/4にリリースしました。
実務経験の無い私が、独学+スクールで培ったスキルで制作しておりますのでどうか温かい目で御覧ください…(´;ω;`)

# 制作したWEBサービス
実際に制作したものがこちらになります。

**https://ideaspace-net.com**
![4557bbcb7649a6236d672c9ce5136dd8.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528941/bf20b120-0b6f-e947-be3b-f61d8f05b121.gif)

サービス名は「ideaSpace」で、普段の生活の中で思いついたアイデアをSNS感覚で気軽に「投稿」&「共有」できるWEBサービスです。

## 何故このサービスを作ったのか?
私含め、個人で何か開発し

元記事を表示

DoorkeeperのAccessTokenが必要なリクエストをテストする

doorkeeper-gem を使用している環境で、発行される AccessToken を Header に必要とする API アクセス (Request Spec) をテストするときの設定方法を備忘録として残します。

## 前提の環境
– [Doorkeeper](https://github.com/doorkeeper-gem/doorkeeper)
– RSpec
– FactoryBot

コントローラとルーティング例はこんな感じ [※ 公式 Doc から少しいじってます](https://doorkeeper.gitbook.io/guides/ruby-on-rails/protecting-your-resources)

“`rb:app/controllers/api/v1/credentials_controller.rb
class Api::V1::CredentialsController < Api::V1::ApiController before_action :doorkeeper_authorize! respond_to :json

元記事を表示

[セッション実装]ユーザー登録(APIの続編)

##チーム課題を個人でやってみるけん_2
セッション編です
[API編はこちら](https://qiita.com/i-to-to-to-mi/items/4a7c239a3d5f3ef8ae99)

**以下はAPI編で作成すみなので飛ばします**
rails new XXX -d mysql
rails db:create
Gemfile[device]記述後 rails g devise:install
ルーティング設定
rails g controller XXX
app/views/XXX/にindex.html.haml作成
rails g devise XXX
マイグレーションファイル記述後 rails db:migrate
application_controller.rb修正
app/models/user.rb修正
rails g devise:views
views/devise/registrations/new.html.haml一部追記
index修正
etc…

##deviseをカスタマイズしてウィザード形式の新規登録にする

“`ruby:ター

元記事を表示

CarrierWaveで複数画像をアップロードする[SQLite][Heroku]

CarrierWaveで複数画像をアップロードする機能を作りたいと思います。
Imagesテーブルを別途作って多対多のアソシエーションを結ぼうかとも考えていたのですが、こちらの記事で、CarrierWaveが複数画像のアップロードに対応していることを知り、

[CarrierWave 複数の画像をコード三行で一つのカラムに保存する](https://qiita.com/ggtmtmgg/items/ba5f275c122c83013ea1)

この記事が参照している[公式ドキュメントのMultiple Uploadの項目](https://github.com/carrierwaveuploader/carrierwave#multiple-file-uploads)を元に、実装を進めていきました。

個人的にはかなりつまづいたので、備忘も兼ねてメモします^^

# テーブルに画像のカラムを追加する

テーブルに(今回は`works`)画像をアップロードするカラム(今回は`images`)を追加します。**カラム名を複数形にする**のを忘れないでください。

“`
rails g m

元記事を表示

S3設定

この記事は初学者が作成した物です。

# 前提知識

AWSのS3を使う際に行うセキュリティー対策。
セキュリティー対策を怠った場合
AWSのID&PWが漏れてしまい膨大な金額を請求される恐れがある。
その為にも、セキュリティー面をしっかりと意識しよう

### セキュリティー対策①
二段階認証

AWSをログインする際にAuthyを利用し
従来のID&PWだけでなく30秒事に変わる数列を作成することができます

###セキュリティー対策②
IAMユーザー

IAMユーザーをは、ルートユーザーから一定の権限を与えられたユーザーです。
たとえハッキングを食らっても余計なことができないようにする為の対策です。

###セキュリティー対策③
Githubにコードを載せない。

git secrets –register-aws –global

上記のコマンドは、git secretsをインストールした際にあらかじめ用意されているコマンドの一つです。
git secrets –register-aws で自力で細かな設定をすることなくAWS向けのcommit検査設定を導入することができ

元記事を表示

Rails Tutorialの知識から【ポートフォリオ】を作って勉強する話 #16 線グラフ, Chartkick編

# こんな人におすすめ
* プログラミング初心者でポートフォリオの作り方が分からない
* Rails Tutorialをやってみたが理解することが難しい

前回:[#15 投稿機能, Active Storage編](https://qiita.com/aokyo17/items/8769ecff3b7c08dca70b)
次回:準備中

# 今回の流れ
1. 完成のイメージを理解する
* Chartkickを理解・導入する
* 各メソッドを作る
* コントローラを編集する
* ビューを作る

この記事は、**動画を観た時間を記録するアプリのポートフォリオ**です。
今回は**入力したフォームからグラフを表示**します。

# 完成のイメージを理解する
今回はフォームから入力された時間を、日付別に取り出し、合計したものを**「週間・月間・年間」でグラフに表示**できるようにします。

そのためにはグラフを描画するgem、Chartkickを使用します。
**「週間・月間・年間」の切り替えには、ドロップダウンからクエリパラメータを送信・取得**します。

完成するとこんな感じです↓
![

元記事を表示

【Rails】Rspecを利用したテストコードとマッチャについて

RSpecを利用したテストコードの記述を学習する中で得た知見の記録を目的とした記事です。

#まずRspecとは
Rubyコードをテストする為にRubyで記述された「ドメイン固有言語」テストツールです。
Railsでは「`rspec-rails`」という`Gem`を導入する事で、使用出来るようになります。
※この記事ではRspecの導入方法については触れません。

導入の目的は、テストコードが設計である事をプログラマーが意識する事と、テストコードの記述をスムーズに行う為です。

#Rspecのディレクトリ構造
RSpecで書かれたテストコードのファイルをspecファイルと呼びます。
アプリケーションのappディレクトリ以下にあるテスト対象となるモデルやコントローラーの位置に
対応させる形で、specフォルダ以下にディレクトリを配置します。

例:
`spec/models/
spec/controllers/`

また、specファイルの命名規則として、**対応するクラス名_spec.rb**と設定する必要があります。

# テストコードについて
前置きが長くなりましたが、テストコード

元記事を表示

[Rails] 大量のレコードを処理するときのN+1問題の影響を調べる(axlsxでファイル出力する場合)

# 概要

DBに格納されている大量のレコードをaxlsxを使ってxlsxファイルに出力しようとしたら、タイムアウトが発生したりする。

そんなとき、少しでも多くのデータを少しでも早く出力しようとした**悪あがき**がこの記事。

※もしレコード数に上限がないのであれば、この対策では根本的な解決にはなりえない。
 この記事の方法でいくら頑張っても、レコード数が増え続ければいずれタイムアウトするときがやってくる。
 なので「悪あがき」とした。

# 結果

**N+1 問題が発生している場合**、N+1 問題をすべて解消した場合と比較して、出力処理にかかる時間が**5倍**程度になってしまうケースが確認できた。

逆に言えば、**N+1 問題を解決するだけで**、出力処理にかかる時間を**1/5**(以下)に抑えることができる可能性がある。

詳細は以下を参照。

# 調査条件

Railsの起動モードは、developmentモードで測定した。

## Versions

||version|
|:–|:–|
|CentOS|7.5.1804 (Core)|
|ruby|

元記事を表示

【Rails】Gemのバージョンエラー「Bundler could not find compatible versions for gem」が出てきたときの対処法

#エラー発生
Railsチュートリアル10章の10.3.2「サンプルのユーザー」で「リスト10.42: GemfileにFaker gemを追加する」で以下のようにgemを追加した。

“`:Gemfile
source ‘https://rubygems.org’

gem ‘rails’, ‘5.1.6’
gem ‘bcrypt’, ‘3.1.12’
gem ‘faker’, ‘1.7.3’
“`

そしてbundle installすると、以下のエラーが発生。

“`
Warning: the running version of Bundler (2.0.2) is older than the version that created the lockfile (2.1.0). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
The dependency tzinfo-data (>= 0

元記事を表示

Rubyの環境構築ーMac

###1. rbnevをインストール

Homebrewを使ってrbenvをインストール

##### ⑴ Xcodeを入手
“`$ xcode-select –install“`
※ Homebrewを使うために「Command Line Tools for Xcode」が必要

バージョンが表示されたらインストール成功
※ 表示されない場合はApp StoreでXcodeをインストールしてみる
“`$ xcodebuild -version“`

##### ⑵ Homebrewをインストール

[外部リンク](https://brew.sh/index_ja)からインストールスクリプトを入手し、コマンドを実行する。

正常にインストールされているか確認。
“`$ brew doctor“`
「Your System is ready to brew」と表示されればOK

##### ⑶ rbenvをインストール
次のコマンドを実行
“`$ brew install rbenv“`

rbenvコマンドが使えるようにするため、パス設定と初期化処理を.zprofil

元記事を表示

[Rails]「×××_path」ってどう編集すればいいの?

#経緯

オリジナルアプリ作成に伴いログイン機能を実装しました。

その際、ログイン後にアクセスしたいページに遷移することができず、かなり時間をとられたので備忘録的に書き残します。

#該当箇所

“`rb:controrllers/application_controller.rb

class Users::SessionsController
def after_sign_in_path_for(resource)
XXXX_path #ご自身のpath
end
“`

#詰まった理由

・「×××_path」が何を表すのか分からなかった。

・「×××」に何を入れればいいか分からなかった。

#分かったこと

・「×××_path」が何を表すのか分からなかった。
→ **サインインした後に表示したいパス(URL)**

・「×××」に何を入れればいいか分からなかった。
→ **rails routesした際のPATHを入力**
(※今回は赤線部分「bustersコントローラー」の「indexアクション」に紐づくViewをログイン後に表示したいので、

元記事を表示

rails: strftimeで0を表示させたくない時

### やりたいこと
__例__
2019年04月21日

“`ruby
birthday.strftime(‘%Y年%m月%d日’)
=> ‘2019年04月21日’
“`
__04__がデザインによって不格好で表示させたくないとき

__表示させたい日時の表記__
2019年4月21日

“`ruby
birthday.strftime(‘%Y年%-m月%d日’)
=> ‘2019年4月21日’
“`

“%-m“とすることで0が表示されなくなる。

元記事を表示

二次元配列とは

# 配列とは?
配列とは、複数のデータを格納することが出来るクラスのオブジェクトの事である。
![配列.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520383/ff02402e-20a4-6101-a105-47f66cbbd086.png)

配列の場合、上記のイメージのように0番目からデータを入れる事によって複数のデータを格納することが出来る。
配列の各要素を取得するには、下記のように[]と添字(インデックス)を指定する。

“`ruby:添字の要素を取り出す
配列オブジェクト[添字]
“`

# 二次元配列
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520383/6d43e717-cac9-9eaf-2430-fc1c13165653.png)
二次元配列は上記の様なイメージで1番に入った2つもさらにインデックス番号が与えられる。

“`ruby:ニンジンを出力する
foods[1][

元記事を表示

EC2 で Jenkins 構築する時にやったこと (Railsアプリケーション)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308256/46abe8ab-c102-37eb-3e01-9fc91199df3a.png)

# はじめに
JenkinsにてRuby on Railsアプリケーションのテスト、デプロイの自動化を実施しました。
そのときに勉強になったことをまとめたいと思います。

ここでは、EC2 上に Jenkins 環境を構築するときに起こったエラーと対処を列挙しました。
綺麗にまとめることはできていませんが、URL先の記事の内容を読めば解決できるかと思います。
少しでも参考になればと思い載せさせていただきます。

#### 関連リンク
関連リンクを下記に載せておくので、必要であれば参考にしてください。。

* Jenkins ふんわり概要
* https://qiita.com/syukan3/items/9f43931988841c2fe343
* Jenkins + Backlog + ElasticBeanstalk 連携

元記事を表示

Rails6でJavaScriptを使う方法

# はじめに
Rails6のアップデートで、JavaScriptを設置する場所や設定方法がRails5以前とは変わったので、Rails6でJavaScriptを使う方法について書きます。

## この記事に書いてあること
– Rails6でJavaScriptを使うには、具体的にどのようなコードを書けば良いのか

## この記事に書いていないこと
– Webpackerとは
– アセットパイプラインとは
– Ajaxとは

# Rails6でJavaScriptを使う方法

## Viewの設定
例として、`app/views/home/index.html.erb`を作成して以下のように記述します。

“`index.html.erb

Hello World

<%= javascript_pack_tag 'home/index' %>
“`
`javascript_pack_tag ‘home/index’`の意味は、「`app/javascript/packs/home/index.js`を読み込んでね〜」という意味です。

## J

元記事を表示

【Rails】Mongoidでembeds_manyの子要素の数を取得する

## 概要
RailsでMongoDBを使用する際、埋め込み型のリレーション(embeds_many)の子要素の数を取得する方法を記載します。

## サンプル例題
親要素はブログ記事、子要素はコメントとして、ブログ記事にコメントの配列を持たせるようなイメージになります。

“`article.rb
class Article
include Mongoid::Document
field :_id, type: String
field :title, type: String
field :contents, type: String
embeds_many :comments
end
“`

“`comment.rb
class Comment
include Mongoid::Document
field :user_id, type: String
field :post_comment, type: String
embedded_in :article
end
“`

## 対応方法
対象のドキュメントについて、全子要素を取得し

元記事を表示

form_withでデフォルトのデータ送信先を変更する[Rails]

ポートフォリオアプリを作っています。
作品の一覧と各作品の詳細は誰でも見られるようにしようと思いますが、作品の投稿と編集は管理者だけができるようにしたいと思います。

管理者ユーザーの作成は、過去の自分のこちらの記事を読んで実装できたのですが、

[【初心者向け】管理者ユーザーと管理者用controllerの追加方法[Ruby, Rails]][1]
[1]:https://qiita.com/tanutanu/items/7ce8826615f1af605164

その後、管理者ユーザーの投稿機能をつけ、submitボタンを押したときに、以下のようなエラーが出ました。

[![Image from Gyazo](https://i.gyazo.com/e987d1db32f9084329e6e98e980551c6.png)](https://gyazo.com/e987d1db32f9084329e6e98e980551c6)

何、`/works`に**POST**メソッドでつながるルーティングがないそうです。
確かに、`rake routes`で確認してみると、管理者ユーザーが

元記事を表示

【Vuex】Rails(devise_token_auth)+Vue.jsのSPAでサインアウトするサンプルコード

## はじめに
Rails + Vue.jsのSPAで**devise_token_auth**を使ってサインアウトするサンプルコードを残します。

リクエストヘッダ情報の保存に**Vuex**を活用しました。

## 環境
“`yaml
OS: macOS Catalina 10.15.1
Ruby: 2.6.5
Rails: 6.0.2.1
Vue: 2.6.10
vuex: 3.1.2
axios: 0.19.0
“`

## 考え方

[devise_token_authの公式ドキュメント](https://github.com/lynndylanhurley/devise_token_auth/tree/master/docs/usage)の、**sign_out**のくだりにはこう書かれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483292/19f999f1-82a7-ab6d-fda7-038821e9c22a.png)

> Use this ro

元記事を表示

【Rails】Rspec何言ってるか解読してみた件。コントローラー#index編

今回は、写真とタイトルを投稿するアプリケーションの**tweetsコントローラーのindexアクション(トップページを表示する)が問題なく動くかどうか**、Rspecという言語を使ってテスト。

##テストする内容は2つ。
1. **tweets_controller.rb内でindexアクションの定義文で生成した@tweetsに、意図したものが入っているかな?**

“`ruby:tweets_controller.rb
def index
@tweets = Tweet.includes(:user).page(params[:page]).per(5).order(“created_at DESC”)
end
“`
1. **テスト環境上で、indexアクションを起こすリクエストを飛ばして、indexアクションに対応したビューが返ってくるかな?**

##コントローラーのテストの際は、2つの点に注意。
①tweets_controller.rbにおいて、テストしたいアクションに対し、before_actionが定義されていないこと。
②gem rails-co

元記事を表示

OTHERカテゴリの最新記事