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

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

【Rails】scaffoldで作成したpostモデルとrails 6 の ActionText を関連づけの手順

rails6でaction textを使ってみるためscaffodlコマンドでpostモデルを作成しActionTextを利用するための設定をする

“`
$ rails action_text:install
$ rails db:migrate
“`

この段階で次のモデルが作成される

“`rails-6-action-text/db/schema.rb
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# This file is the source Rails uses to define your schema when running

元記事を表示

検索機能を実装するンゴ

ransackを使わない簡易検索機能です。

#ルーティング

“`ruby:routes.rb
Rails.application.routes.draw do
resources :tweets do
collection do
get ‘search’
end
end
end
“`

実際生成されるルーティングがこちら。

“`:ターミナル
Prefix Verb URI Pattern Controller#Action
search_tweets GET /tweets/search(.:format) tweets#search
“`

#ビュー
検索フォームを好きなところへ配置。

“`ruby:search.html.haml
= form_with(url: search_tweets_path, local: true, method: :get) do |form|
= form.text_field :keyword
= form.su

元記事を表示

Rails+Vue.jsでバリデーションエラーを各項目の下に表示する

#はじめに
Rails側のモデルに定義したバリデーションを使いつつ、
バリデーションエラーを各項目の下に表示するのに苦労したのでまとめておこうと思います。
今回、バリデーション関連以外の説明は省略させていただきます。
ご了承ください。。

#やりたいこと
このように項目の下にバリデーションエラーを表示するようにします。(見た目は気にしないでください。。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201112/dad76f3c-3563-5beb-bad1-985e8cf06d98.png)

#実装してみる
###バリデーションを設定
ここでは必須のバリデーションだけ設定しておきます。

“`ruby
class Company < ApplicationRecord validates :name, presence: true end ``` ###API側の実装 vue.js側で各項目ごとのエラーメッセージを取り出せるようにします。 具体的には下記のようなハッ

元記事を表示

current_page?で場合分け

newとeditで同一の部分テンプレートを利用しているが、それぞれちょっとだけ変えたい時

`current_page?(URL)`で指定したページにいるか判定してくれます。

“`ruby:_form.html.haml
– if current_page?(new_tweet_path)
新規作成
– if current_page?(“/tweets/#{tweet.id}/edit”)
編集
= form_with model: tweet, local: true do |form|

“`

newページでは`新規作成`が、
editページでは`編集`が表示されるようになりました。

`(URL)`の部分は以下が可能みたいです。
エラーが出たらいくつか試してみてください。

###・URL
`current_page?(http://hoge.com/hoge)`

###・パス
`current_page?(/tweets/new)`

###・prefix
`current_page?(new_tweet_path)`

###・アクション指

元記事を表示

【Rails】マイクロポストと画像のアップロード【Rails Tutorial 13章まとめ】

##基本的な画像のアップロード
画像付きのマイクロポストを投稿できるようにする。
画像の投稿フォームと、投稿された画像の表示機能を実装する。

###carrierwaveジェム
画像アップロード機能を追加するcarrierwaveジェムをGemfileに追加する。
加えて、画像をリサイズするmini_magickジェムと、本番環境で画像をアップロードできるfogジェムも追加する。

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

gem ‘rails’, ‘5.1.6’
gem ‘bcrypt’, ‘3.1.12’
gem ‘faker’, ‘1.7.3’
gem ‘carrierwave’, ‘1.2.2’
gem ‘mini_magick’, ‘4.7.0’
gem ‘will_paginate’, ‘3.1.5’
gem ‘bootstrap-will_pagina

元記事を表示

自動デプロイ実行中にunicornが起動しない(SSHKit::Runner::ExecuteError)

# この記事は初学者がエラーになったときの対処法を記載したものになります。
同じ初学者の方は、一度記事を全部読んで同じ症状に当てはまる場合実行してみてください。

## 現状
現在私は、1つのrailsアプリケーションを作り、AWSのEC2、Mysql、Nginx、Capistrano等を使い自動デプロイを行う際に置きたエラーになります。
また、私は、このアプリケーションで一度自動デプロイを成功させておりますので、初めて自動デプロイを行った際のエラー内容ではありません。

## エラー内容

“`html:ローカル環境
bundle exec cap production deploy
“`
自動デプロイコマンドを実行後unicornが起動しない

“`html:エラーコマンド一部

bundle exit status: 1 (SSHKit::Runner::ExecuteError)

Caused by:
SSHKit::Command::Failed: bundle exit status: 1

Tasks: TOP => unicorn:start
(See full

元記事を表示

We’re sorry, but something went wrong.

# この記事は初学者がエラーになったときの対処法を記載したものになります。
同じ初学者の方は、一度記事を全部読んで同じ症状に当てはまる場合実行してみてください。

## 現状
現在私は、1つのrailsアプリケーションを作り、AWSのEC2、Mysql、Nginx、Capistrano等を使い自動デプロイを行う際に置きたエラーになります。

## エラー症状
自動デプロイ後 IP で繋いだ所下記の画面が表示される。
スクリーンショット 2019-12-04 1.47.25.png

##原因

私の場合、デプロイ後に

“`html:サーバー環境
kill -QUIT `cat tmp/pids/unicorn.pid`
“`

上記のコマンドを訳もわからずに実行した結果表示されました。
(上記コマンドは、ユ

元記事を表示

Railsアプリのデプロイ方法について(基礎)

自身で作成したアプリ(Rails)をデプロイする流れを学習したので、備忘録もかねて纏めます。

*今回まとめた大変なデプロイ作業を Capistrano というライブラリを使うと自動化できるとのこと。
こちらについては、別途学習次第、纏めます。

#全体の流れ
1. EC2のサーバに作成したコードをクローンする準備
まずはEC2のサーバに作成したコードを設置します。
そのために、Githubにあるコードのリモートリポジトリからコードをクローンしてくる準備をします。

2. アプリケーションサーバの設定
Railsを動かすためには、アプリケーションサーバと呼ばれる種類のソフトを起動する必要があります。
その後、コードをEC2へクローンします。

3. 本番環境でのRailsの設定
最後に、開発環境と本番環境での差異を埋めるための作業を行い、しっかりと公開できているか確認します。

##1. EC2のサーバに作成したコードをクローンする準備
まず、アプリケーションのコードをGithubからEC2サーバへクローンします。
全世界に公開できるIPアドレスを持ったEC2サーバ上でアプリを動かす

元記事を表示

【Rails】ユーザーのマイクロポスト【Rails Tutorial 13章まとめ】

##Micropostモデル
ユーザーに紐づいた短いメッセージの投稿機能を実装する。

###user:references
user:referencesをつけて、text型のcontentカラムを持つMicropostモデルを作成する。

“`console
$ rails generate model Micropost content:text user:references
“`
これによりMicropostモデルは自動でbelong_toによってユーザーに関連づけられ、user_idカラムも追加される。

ユーザーごとの投稿を作成時刻の逆順(新しい順)で取り出しやすくするために、user_idカラムとcreated_atカラムにインデックスを追加する。

“`db/migrate/[timestamp]_create_microposts.rb
class CreateMicroposts < ActiveRecord::Migration[5.0] def change create_table :microposts do |t| t.te

元記事を表示

rails install:webpackerができない件について

## 環境
* rails 5.2.3
* ruby 2.6.3
* yarn 1.19.2

## エラー内容

railsでvue.jsを追加するために、rails install:webpackerをしようとしたところ

“`
rails aborted!
Sprockets::Railtie::ManifestNeededError: Expected to find a manifest file in `app/assets/config/manifest.js`
But did not, please create this file and use it to link any assets that need
to be rendered by your app:

Example:
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
and restart your server
/Users/user/

元記事を表示

【超基本】railsで部分テンプレートを使ってみる(haml)

# 経緯

ずっと苦手意識のあった部分テンプレートと向き合った結果、「なにこれ、便利!!」となったため、備忘録のために記事にします。
hamlで書いた記事があまりなかったり、localオプションの変数の意味や、collection、asの詳しい説明をなかなか見つけられなかったので、同じことで悩んでいる誰かのお役に立てたらすごく嬉しいです。

# もくじ
– 部分テンプレートとは
– ファイル名
– hamlへの記載方法
– オプション
– partial
– locals
– collection
– as
– まとめ

# 部分テンプレートとは

部分テンプレート(=パーシャル)とは、繰り返し使用される要素をまとめてテンプレート化するもの。何度も同じコードを書くことを防ぐことができる。また、投稿一覧画面を作成する際、collectionオプションを使用すると、each分を使わずに繰り返しができ、読み込み速度もeach文を使用する時より速い(らしい)。

# ファイル名

部分テンプレートのファイル名は、必ずファイル名の最初に**「_(アンダーバー)」**をつける。アン

元記事を表示

Rails6でProtocol Buffersを使用する

こんにちは。

SmartHR アドベントカレンダーの4日目を担当しますエンジニアの[@kurobara](https://twitter.com/kurobara)です。

SmartHRでは、プラットフォーム化を促進するプラスアプリの開発をしています。
プラスアプリについては、弊社社長による[SmartHR Next 2018](https://mag.smarthr.jp/guide/vision/detail/smarthr_next_2018_miyata/)やCTO 芹澤の[中長期戦略](https://mag.smarthr.jp/guide/vision/detail/smarthr_2019kickoff_serizawa/)などに詳しく書かれています。

ところで、前日が社長だと次に渡されるバトンを担当する側としても緊張しますね>< # 前置き 皆さん、型は大好きですか? 僕も好きです。 特にサーバサイドになんらかの言語でAPIをフロントエンドにTypeScriptで・・・ そして、サーバサイドとフロントエンドのI/Fとして、JSONを使用する 割とよくある

元記事を表示

Google Compute Engine&Nginx&Railsタイムアウト考察

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

# タイムアウト対策

Webでの大量データのPDF、CSVダウンロードなど、API実行すると処理が圧倒的に長くなるとタイムアウトになります。根本のロジックを見直す、非同期処理やバッチ処理を検討することが必達です。

ただ、根本対策に時間を要してしまう可能性があったため、暫定対策としてのインフラ側のタイムアウト値設定を伸ばすことをやってみたのでまとめます。

4分(240秒)ぐらいかかる処理だったため、余裕を持って5分(300秒)ほど処理できるようにしたものです。

(WebAPIとしてありえないとは突っ込まないでほしい。一旦。。)

## 前提となる環境
– GoogleComputeEngine(Linux CentOS)
– GCPロードバランサ
– nginx
– Rails(APIモード)
– Puma
– Vue.js(axiosでAPI実行)

## 処理順序は?
基本的に処理が進

元記事を表示

【jQuery】activの時にFontAwesomeをつけたい

#コトの顛末
アクティブ状態の箇所にカレントとしてFontAwesomeのアイコンをつけたかったのですが、
jQueryでaddClassすると思ったようなレイアウトにならない事案が発生。
hamlで直書きして調整するとあんなに楽なのになぁ…

ということで小技発見したのでメモがてら書きます。

#問題の事案

FontAwesomeのclassをjQueryでaddClassすると、classはちゃんとつくのですが、
そのclassが付与されたところのレイアウトを合わせるのが大変だったので楽な方法ないかな〜と思ってました。

下記のように空の<i>タグを用意して、

“` index.hmlt.haml
%i.fa
“`
それにclassつけたら擬似的に直書きと同じことができる!って思ったんですが…

ブラウザで表示を確認すると、**空タグのせいかレンダリングされたコードの中にいないため、**
**jQueryのaddClassが不発になるという事案が発生しました。**

#このような処理で小技を実行しました。

まず、普通に FontAwesomeのアイコン使いたいとこ

元記事を表示

railsアプリではクラスインスタンス変数の注意する

# クラスインスタンス変数の注意

右辺の実行結果をキャッシュするために以下の手法が使われる事があると思います。
1回目のメソッド実行時に実行結果をインスタンス変数`@foo`でキャッシュしておいて、2回目のメソッド実行時にはインスタンス変数の中身を返しています。

“`
Class Foo
def
@foo ||= bar
end
end
“`
インスタンスメソッドの場合、インスタンス変数はFooクラスのオブジェクト毎に保持されます。
railsアプリ内のコードでこれをクラスメソッド内で使用する場合は注意が必要です。

“`
Class Foo
self.def
@foo ||= bar
end
end
“`

クラスメソッド内でインスタンス変数はClassクラスのオブジェクト毎に保持され、
Classクラスのオブジェクトはrailsアプリケーション起動時から同じものを使い続けます。
その為、DB問合せ結果をキャッシュしてしまったりすると、**アプリケーション起動後DBに初めて問い合わせした値を保持し続けてしまう**為、その後別のリクエストでD

元記事を表示

メモ

#ストロングパラメータ
指定したキーのみを受け取るので、データをDBに入れるかどうかを判別させるために使う。
ex params.permit(:キー名,キーの値)

#java script

list.push(***); 配列に要素を追加する。

list.pop(); 配列の最後の要素削除
⇅ 逆の関係
list.shift(); 配列の最初の要素削除

オブジェクトの作成
let object = {};

関数を使うとき
returnを記述する。
 returnは関数内で処理をした結果戻り値として返す。

関数とは
入力された 値に対して 出力して 返すこと

引数 → 関数 → 戻り値

function calc(num1,num2){
return num1*num2;
}

let num1 = 5;
let num2 = 7;
console.log(calc(num1,num2));

DOM (document object model)

htmlを階層上に表現したデータでjava script

body ———header

元記事を表示

Railsチュートリアル 第11章 リスト11.26のテストでテスト結果がRedになるはずのところでGreenになってしまった。

過去の2つの記事との脈絡が無いのが申し訳ないのですが、現在Railsチュートリアルの2周目を行っていて、あまりにもQiitaへの投稿をこまめにやっていなかったのが自分でも気になり、練習がてら自分がハマってしまったことについて投稿する練習をしてみようと思い投稿しました。
内容的にあまりにも初歩的な内容のため誰かの参考になるような記事では無いと思います。

## 問題
リスト11.26からリスト11.30までテストの結果がRailsチュートリアルが意図するものと違う結果になってしまっていた。
リスト11.26
https://railstutorial.jp/chapters/account_activation?version=5.1#code-generalized_authenticated_p

本来このリスト11.26ではRailsチュートリアルの説明通り引数の数が合わないことが原因となるArgumentErrorが出るはずであったが、何故かErrorは出ずにGreenになってしまった。

リスト 11.26: 抽象化された`authenticated?`メソッド **red*

元記事を表示

Railsエンジニア初心者からの卒業

[Ateam cyma Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ateam-cyma)、1日目です!
トップバッターは [株式会社エイチーム](https://www.a-tm.co.jp) のエンジニア @u_minor3110 が務めさせていただきます。

早速ですがRailsを使うようになったけど、**どうなったらRailsエンジニアとして一人前なんだろう?一人前になれるんだろう?**と悩んでいる方、いらっしゃいませんか?そもそもスキルは定性的なもので計りづらいし、個人の目標であっても会社の業績に関わるものだったりして、なかなか実感を持てないかもしれません。そんな人のために、これらの機能の作り方を理解することができれば、とりあえず**Rails初心者からは卒業!**と言えそうなことを紹介したいと思います。なぜならこれらを理解できればそれなりの**WEBサービスを作ることができるから**です。
~~あとは教えるときにこれを見てくれれば個人的に楽できるかもしれない~~

なお、ruby gemを使った説

元記事を表示

#Rails OR #Ruby + ActiveSupport の String#in_time_zone で 2月29日 30日 31日 が3月にずれるのだが

Rubyとか言語使用に関わる、深い事情ありの話かと思った。

Date.new を利用した方が良いかな。

“`rb
require ‘active_support/core_ext’

‘2019-2-29’.in_time_zone(‘Tokyo’).to_s
# => “2019-03-01 00:00:00 +0900”

‘2019-2-30’.in_time_zone(‘Tokyo’).to_s
# => “2019-03-02 00:00:00 +0900”

‘2019-2-31’.in_time_zone(‘Tokyo’).to_s
# => “2019-03-03 00:00:00 +0900”

‘2019-2-32’.in_time_zone(‘Tokyo’).to_s
# ArgumentError: argument out of range

Date.new(2019, 02, 28).in_time_zone(‘Tokyo’)
# => Thu, 28 Feb 2019 00:00:00 JST +09:00

Date.new(2019, 02,

元記事を表示

さくらVPSでCentOS7 11.RailsプロジェクトをGitで共同開発

#はじめに
自由にテスト出来るLinuxのサーバーがほしくて、さくらVPSで構築してみました。
順次手順をアップしていく予定です。

前回インストールしたRuby On Railsを共同開発できるようにGitで管理したいと思います。

#目次

1. [申し込み](https://qiita.com/Qsugi/items/9239f93f35967e567b5b)
2. [CentOS7インストール](https://qiita.com/Qsugi/items/4cc4ba9983191a306b19)
3. [SSH接続](https://qiita.com/Qsugi/items/45772c8a71a31bd0d3c8)
4. [Apache・PHPインストール](https://qiita.com/Qsugi/items/bf9740f31b4c42eaad91)
5. [MariaDBインストール](https://qiita.com/Qsugi/items/7798669338b555f4ea8d)
6. [FTP接続](https://qiita.com/Qsugi/i

元記事を表示

OTHERカテゴリの最新記事