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

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

Railsのコールバックを用いてtextカラムに自動で記述を追加する方法

もし、ツイートの最後に定型文などをつけたい場合ってどうすればいいんだろう。
今日はそんなことを書きます^^

# コールバックとは

・オブジェクトの生成・更新・削除のタイミングで呼び出されるメソッド
・イベント(create, save,destroy)をトリガーとして登録可能
・トリガに対してメソッドを共通化できて便利

情報を変更や削除した時に呼び出せつメソッドですね。

# before_createで最後に!!を足してみる

では、before_createを使ったコードを書いていく。

“`
before_create :change_tweet

def change_tweet
self.text = text + “!”
end

end
“`

## 処理の流れ

before_createが作動

change_tweetメソッドが呼び出される。

change_tweetメソッドの中に定義してあるself.textの処理

self.textの中には、text + “!”という処理が代入されている

textとは、Twe

元記事を表示

[aws,rails,deployのエラー解決]Errno::ENOENT: No such file or directory @ dir_s_chdirおよびSSHKit::Runner::ExecuteError: Exception while executing as ec2-user@3.115.38.38: bundle exit status: 1のエラー解決例

#1.エラーの様子

題名のエラーは下記のように吐かれたものでした

“`
Traceback (most recent call last):
1: from /Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute’
/Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute’: Exception while executing as ec2-user@3.115.38.38: bundle exit status: 1 (SSHKit::Runner::ExecuteError)
b

元記事を表示

MPAのrailsの中にvueで部分的にSPAを作るwith Docker

# なぜそんなことをしたのか
その昔、業務委託でジョインした副業先の既存プロダクトにメッセージ機能の新規機能追加の担当して
当時本業でvueをよく触っていたため

# 技術選定で結構迷った
当時、本業の方は完全なSPAだったのでrailsから分離させてvuecliで開発していたが
副業先はMPAだったため

## WebpackでやるかWebpackerでやるか
答え: Webpacker

理由: 既存のslimのテンプレートエンジンのlayoutを流用するため あと、なんだかんだWebpackerにしてよかった気がする

# やっていく
※mysqlなど入れず最小構成でやります
※dockerの設定やrails、vueの文法や扱いなどはある程度わかっている前提として、細かい解説は省略します

# 1. vue入りのrailsプロジェクトを作る
## 適当なディレクトリを作りDockerで準備していく

“`dockerfile:Dockerfile
FROM ruby:2.6.1

ENV LANG C.UTF-8
ENV TZ=Asia/Tokyo

WORKDIR /usr/

元記事を表示

credential.ymlの設定方法使い方など

久しぶりにrails記事書きます。

credential.ymlのことです。
version 5.2~実装されたsecrets.ymlの後継に当たるものですね。

理解が曖昧だったのでまとめました。

##credential.ymlの作成

作成されるタイミングは `rails new`した時。
`create config/master.key`と出てました。
しかし、create credential.ymlのような記述は探してもなかったですけどrails newしたら作られてましたので同じタイミングですね。
* create master.keyしたすぐに.gitignoreにappend処理が行われるので、gitの管轄から自動的に外されます。

もしも、どちらかもしくはどっちのfileも削除してしまった際には
`$EDITOR=’vi’ rails credentials:edit` コマンドで再作成できます。
このコマンドは主に、credentialsを編集するときに使います。
(おそらく、fileがなければ、作成しあれば編集するような条件をかけているのかな?)

##

元記事を表示

【Rails】has_many、belongs_to

#has_many
テーブル同士を関連づけるためのものです。
関連づけているのでテーブルの操作等が効率的にできます。

##関連付け
関連付けとはテーブル等で関係があるものについて明示的に表現することです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/4bdbd564-1107-f94f-ff9d-af123e9f70ee.png)
上記のような関係があったとき`Petテーブル`に「犬」と「猫」があってその飼い主が“Ownerテーブル`「佐藤さん」だったときに、
佐藤さんが犬と猫を手放した場合、佐藤さんが飼っているペットを全て削除するということができます。

こちらは関係が`「1」対「多」`になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/3d166f14-0944-41e5-7395-1c9466460b74.png)

このようなテーブル

元記事を表示

gin,gormを使ってgolangでRailsっぽい構成のAPIを作った

#概要
– 仕事で`golang`を使ってみようという話になりAPIを作りました。
– 自分自身も他メンバーも`Rails`使いが多いのでRailsに寄せてMVC構成で作りました。
– `golang`に慣れたメンバーが少なかったのでできるだけ[メジャーで情報が多そうなフレームワーク](https://qiita.com/yumin/items/5de33b068ead564ebcbf)を使おうと考えて`gin`を採用しました。
– 同様にORMも`gorm`がメジャーなようだったので採用しました。
– `golang`自体が手探りの状態だったので主に以下を参考にさせて頂きました。
– 日本語のQiitaの記事[Gin と GORM で作るオレオレ構成 API](https://qiita.com/Asuforce/items/0bde8cabb30ac094fcb4)
– Starが多かった[深センの方が作ったAPI](https://github.com/eddycjy/go-gin-example)
– 自分でもサンプルAPIとして[gin-gorm-rails

元記事を表示

ActiveRecordで使っているDBの接続情報を調べる

## 手順

1. サーバーが動いていることを確認する
2. `rails c`をする
3. irbの中で下記のActiveRecord〜を入力する

“`sh
irb> ActiveRecord::ConnectionHandling.connection_config
# => {:pool=>5, :timeout=>5000, :database=>”db/development.sqlite3″, :adapter=>”sqlite3″}
“`

## 参考リンク

https://apidock.com/rails/ActiveRecord/Base/connection_config/class

元記事を表示

Rails ~ユーザー機能の実装~

#概要 
Railsを使用したユーザー機能の準備、実装を忘れないようにメモしておく。
#モデルとテーブルの作成
Userモデルとusersテーブルを作るためターミナルへコマンドを実行する。今回はnameとemailの2つのデータをもたせる。
「カラム名:データ型」の部分は図のように複数並べることが可能。
stringとは短い文字列のこと。ユーザー名やメールアドレスといった短い文字列のデータに用いる。
“`rails g model User name:string email:string
rails db:migrate“`
とターミナルへ入力。モデルをジェネレートしますよー。
Userって名前ね。string型のnameってカラムとemailってカラムをください。
データベースに変更を反映させてねーって意味になる。
#dateの保存について
テーブルにデータを保存させるには
① newメソッドでUserモデルのインスタンスを作成
② saveメソッドでuserテーブルに保存
この2つの処理が必要

#バリデーション
“`
validates:email,{uniquenes

元記事を表示

正規表現

##正規表現とは
特徴的なのは
電話番号のハイフンを取り除く(文字列の一部分を置換する)
パスワードに英数字8文字以上という制約を設定する(文字列が制約を満たしているか調べる)
メールアドレスからドメインの部分のみ抽出する(文字列の一部分を抽出する)
などがあります。
正規表現にはsubメソッドとmatchメソッドがあります。
##subメソッド
文字列の指定した部分を別の文字列に置き換えるためのメソッドです。
【例】ターミナル

“`
$ irb
“`
“`
irb(main):001:0> str = “水を飲む”
=> “水を飲む”

irb(main):002:0> str.sub(/水/,”お茶”)
=> “お茶を飲む”
“`
操作したい文字列は/で囲みます。
##matchメソッド
引数に指定した文字列がレシーバの文字列にあるかを確認するためのメソッドです。ある場合は、指定した文字列がMatchDataオブジェクトの返り値になります。ない場合は、返り値としてnilになります。
【例】ターミナル

“`
rb(main):001:0> str = “おはよう, おや

元記事を表示

Ruby on rails で星を散らす

#はじめに
railsで、リロードする度に見え方が変わる星空を再現してみます
![star-sky.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481085/bef194a6-fe03-aad2-7337-fb5bff5f52ae.jpeg)

[作成したWebアプリ](http://fffbookmark.herokuapp.com/)にも採用しています。

#実行
最初に次のファイルを用意します。

“`haml:index.html.haml
.sky
.stars
“`

“`css:star_sky.css
.sky{
background-color: #014; //黒っぽければなんでもいい
}

“`

次に、星を表すオブジェクトを用意します。

“`haml:index.html.haml
.sky
.stars
.star
“`

“`css:star_sky.css
.sky{
background-color: #014; //黒っぽければなんでもいい
}

元記事を表示

アプリケーションを作ってみます

自分用メモ

new コマンド実行
rails _5.0.7.2_ new Put.Memo -d mysql
データベースを作成
rails db:create

作るのは単語帳アプリ
最初にデータベース設計をしてみて自分のしてみたいことを整理してみた
機能として
—アカウント機能
—投稿機能
—いいね機能
—検索機能
—意味の部分にurl,画像を描けるようにする
—ランキング機能

![82486AC1-7B32-4DAC-8A93-1D76A94AED99_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600111/d3d9a033-54ac-3948-16df-67a0c3da17d4.jpeg)

次にフロント実装

topページには
:スクロール機能
:ランキング機能

↑とりあえずこれだけ実装したい
できればタグごとのランキング,ページネーション機能をつけたい

ビューはこんな感じ
単語、意味とurlと画像
で一つの投稿としてこれをランキングで

元記事を表示

中間テーブルとは 〜DB設計〜

#概要

アソシエーションの中で多対多の関係性で使われる中間テーブル。

今回、中間テーブルとは何か? 自分の復習用に記事を執筆しようと思います。

##そもそもアソシエーションとは?

Railsで使われているテーブルとテーブルを関連づける機能。

例えば、TwitterではUserとtweetがあるとして、

二つはUserがtweetすることでtweetが生じる関連付いた関係性である。

###アソシエーションを組まないとどうなるのか?

**AさんがtweetしたtweetがAさんと関連づけされなくなる。**

AさんのtweetもBさんのtweetも一緒くたに扱われるため、外部キーのIDを取得する必要が出てきます。

###一対多、一対一の関係性

アソシエーションの中には一対多、一対一

**最後に中間テーブルが使われる多対多の関係性が存在する。**

####一対多

最初に一対多とは親モデルが子モデルに対して多数の要素を持つこと。

Twitterの場合、一つのUser(親モデル)は沢山のtweet(子モデル)をします。

Userモデル(親モデル)

| ID

元記事を表示

【RSpec】System Specが動作するRails+Docker開発環境を構築する

# はじめに

Rspec3.7以降で実装された”System Spec”を動作できるRails+Docker環境の作り方をまとめました。

基本コピペで進められるように書きましたので、初学者の方であっても「まず動く」状態まで持っていけると思います。

この記事では、Docker、docker-composeがすでにインストールされた状態からスタートします。私は、自PC(Mac)のホストOSに「[Docker for Mac](https://hub.docker.com/editions/community/docker-ce-desktop-mac)」をインストールしています。

著者動作環境における、Docker、docker-composeのバージョンは以下の通りです。

“`:
$ docker –version
Docker version 19.03.5, build 633a0ea
“`

“`:
$ docker-compose -v
docker-compose version 1.25.4, build 8d51620a
“`

# DockerでのRa

元記事を表示

prefixを正確に調べた

#prefixの認識レベル
ミニブログを作っている最中、ふとprefixについて考えた時に
「パスを代入する変数」というレベルでしか認識していなかったので
詳しく理解するために調べてみた。

#【詳しく調べたかったポイント】

①prefixを使用するメリット(必要性。パス記入の方が分かりやすくない?)
②普通にパスを記入する事との使い分け

#調べてわかった事

###まず第一に、prefixはRailsが推奨している記述方法らしい。
“`
tweet_path
“`
でパスの指定完成。

####①prefixを使用するメリット(必要性。パス記入の方が分かりやすくない?)について
→結論あまりないらしい。
 1,Railsが推奨している
 2,シンプルで直感的に分かりやすくなる(?)

というのが使用している理由らしい。

####②普通にパスを記入する事との使い分け
→開発現場による。「こんな時はprefix!!」みたいなのはないっぽい。

#結論

####僕は普通にパスを書く方が好き。

「私はprefix派!」「prefixにはこんなメリットがあるぞ!」
とい

元記事を表示

Sass::SyntaxError in Devise::Registrations#new 解決方法 

# 前提条件
・gemfileに使いたいパッケージを記述している

“`ruby:Gemfile
gem ‘devise’
“`
・ターミナルで`bundle install`が済んでいる

#エラー内容
[![Screenshot from Gyazo](https://gyazo.com/baf646c7015789692e427e05c5d0bcac/raw)](https://gyazo.com/baf646c7015789692e427e05c5d0bcac)

どうやら`@import “modules/user”`でうまく’_user.scss’が読み込めてないみたいです

_user.scssを動かしてみます

[![Screenshot from Gyazo](https://gyazo.com/3312129d7e24ff4d79d97754578abde5/raw)](https://gyazo.com/3312129d7e24ff4d79d97754578abde5)

ここから

[![Screenshot from Gyazo](https://g

元記事を表示

Railsからデータベースを参照(集計)するときの書き方

###前置き?
ビューを作成する前に、railsコントローラにおいて、データーベースの値を取ってくる場合にどのように記述するのか。今回はgroup by してからのカウントした値を取得する場合のRailsの書き方を調べるのに随分苦労したので、残しておく。

###前提条件

JavaScriptで作成したタイピングゲームをRuby on Railsにのせようとしている。
集計が必要か?ってなったのは、タイピングした結果をランキング表示させようと思い立った時に、問題別のランキング表示をする前に、問題別にどれだけチャレンジャーがいたのか、っていうのを先に一覧表示した後で、ランキング表示をしようか、と思ったから。

###テーブル

|Qfiles|
|—|
|id|
|title|
|category|
|results_count|
|その他|

|Results|
|—|
|id|
|user_id|
|qfile_id|
|その他|

###出そうとした値

1. 「Qfile辺りのResultを残したuser_id数」
2. 「Qfile辺りのResultを残した数」

元記事を表示

【初心者】長めのモデル名(スネークケース)からfindとかをする

#コンソールでモデルから値を取得しようとしたとき
知らずにスネークケースでモデルを指定してエラーになっていたので調べました。
おそらく初心者や始めたばかりの頃は`User`モデルとか`Post`モデルなどしか扱わないので悩まないと思います。。
そもそもスネークケース、キャメルケースとは?という方へ。

#UserとかPostとかの短いモデル名のとき

“`
User.find(1)
“`
簡単に取得できますね。

#長めのモデル名のとき
####キャメルケースとスネークケースとは

“`
CustomerOrder
“`
キャメルケース(大文字部分がラクダの背中っぽい)
CとOが大文字

“`
customer_order
“`
スネークケース(ヘビっぽい)
単語と単語のつなぎ目に_が使われている

#モデルから値を取得

“`
CustomerOrder.find(1)
“`
で取れます。(キャメルケース)

“`
Customer_order.find(1)
“`

スネークケースでは不可。

元記事を表示

環境変数設定メモ

完全に個人的めも

# 基本的にrails アプリケーションにおいて環境変数を設定する際はターミナル上で.bash_profileを作成して管理をして行くのが一般的である。

“`
vim ~/.bash_profile コマンドで展開
“`
i でinsertモード
ESCキー 
:wq 保存
:q! 保存せずに閉じる

環境変数の記述は

“`
export KEY = ‘*******************’
export SECRET_KEY =’***********************’
“`
の形で定義

ここに記載した、環境変数を

ENV[‘KEY’]
ENV[‘SECRET_KEY’]
の形で使用する。

“`
source ~/.bash_profile コマンドにて.bash_fileを読み込み
“`

もう一つの環境編すの構成方法
Dotenvという.envファイルに記述する方法。

rails ではGEMをインストール
gem ‘dotenv-rails’

gemfileなどが存在するrootディレクトリに.envファイルを作

元記事を表示

【Rails】Sorceryでログイン機能を実装する

Sourceryでログイン機能を実装してみました。
`Devise`よりカスタマイズしやすそうで、自分で実装するより手軽なので結構好印象です。
フレンドリーフォワーディングが簡単に実装できるのが良いですね。

##セットアップ
“`rb:Gemfile
gem ‘sorcery’
“`
“`zsh:terminal
$ bundle install
$ rails g sorcery:install
“`
Userモデルとマイグレーションファイル、設定ファイルなどもろもろ生成されます。

“`zsh:terminal
$ rails db:migrate
“`

モデルにバリデーションを設定

“`model/user.rb
class User < ApplicationRecord authenticates_with_sorcery! validates :email, uniqueness: true, presence: true validates :password, presence: true end ``` `application_co

元記事を表示

[Rails, jQ]インクリメンタルサーチ

#インクリメンタルサーチ
本記事では前回作成した[ユーザーの名前検索機能](https://qiita.com/Masanori_N/items/5065bc59d9dff88d5152)を使用して実装していきます。
以下を使用しています。

– ruby 2.5.1
– rails 5.2.4.1
– gem ‘jquery-rails’
– gem ‘devise’

なお、使用するビューは以下を使用します。

““`erb:index.html.erb
<%= form_with(url: users_searches_path, local: true, method: :get, class: "search_form") do |f| %>
<%= f.text_field :keyword, placeholder: "Name", class: "search_input" %>
<%= f.submit "Search", class: "search_btn" %>

<% @users.each do

元記事を表示

OTHERカテゴリの最新記事