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

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

[Rails]DMユーザーリスト表示

#はじめに
個人で学習のため作成しているアプリにログインユーザーがDMを行っている相手のユーザーリストを作成しました。
その中でhelperメソッドを作成し使用したため備忘録として書きます。

####仕様

– DMの部屋が存在する(過去に部屋を作成した)ユーザーを一覧で表示
– 表示内容は
– ユーザー名
– 最新メッセージの内容
– まだメッセージがなければ[ まだメッセージはありません ]と表示

– テーブル
– user: ユーザーデータ
– room: DMを行う部屋データ
– entry: userとroomの中間テーブル

###usersテーブル
| Column | Type | Options |
|:–|:–|:–|
| id | integer | |
| name | string | |
##### association

– has_many :entries, dependent: :destroy
– has_many :rooms, through: :entries

###roo

元記事を表示

Rails6 のちょい足しな新機能を試す 127(memory cache編)

# はじめに

Rails 6 に追加された新機能を試す第127段。 今回は、`memory cache` 編です。
Rails 5.2.4.2 や、 Rails 6.0.0 では、 キャッシュとして、 memory cache を使っていて、 キャッシュから値を取り出したあとで、その値を破壊的メソッドなどで修正すると、 キャッシュの値も変わってしまうというバグ(?) がありました。

Rails 6.0.1 以降では修正されています。

Rails 6.0.2.2, Rails 6.0.1, Rails 6.0.0, Rails 5.2.4.2 で確認しました。

“`shell
$ rails –version
Rails 6.0.2.2
“`

今回は、 User モデルを作って cache を使って値を取り出すメソッドを作成して確認していきます。

# Rails プロジェクトを作る

Rails プロジェクトを新たに作成します。

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

# User モデルを

元記事を表示

Active Record Transactions のドキュメントを翻訳しました

# 概要
[Active Record Transactions](https://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html) のドキュメント部分を翻訳しました。

# Active Record Transactions
トランザクションは、SQL 文が1つのアトミックアクションとしてすべて成功した場合にのみ、SQL 文が永続的なものとなる保護ブロックです。古典的な例は2つのアカウント間の転送で、そこでは引き出しが成功した場合にのみ預金を持つことができ、その逆も可能です。トランザクションはデータベースの整合性を強化し、プログラムエラーやデータベースの故障からデータを守ります。そのため基本的には、一緒に実行しなければならない SQL 文がいくつもある場合は、トランザクションブロックを使用するべきです。

例:

“`ruby
ActiveRecord::Base.transaction do
david.withdrawal(100)
mary.deposit(100)
en

元記事を表示

テーブルに外部キーを設定する方法

genre has_many tasks
task belongs_to genre
の関係性でtasks_tableにgenre_idの外部キーを設定する方法をメモしておきます。

##1 方法
まず外部キーをもったテーブルを作成するのと既存のテーブルに外部キーのカラムを追加するのとで方法が異なります。

##2 テーブルを作成する際に外部キーを設定する場合
コマンドで

“`:ターミナル
$ rails g model Task genre:references
“`

とすることで、genre_idを外部キーに持つTasksテーブルが作成されます。

##3 既存のテーブルに外部キーカラムを追加する場合

“`:ターミナル
$ rails g migration AddGenreRefToTasks genre:references
“`

とすることで既存のtasksテーブルに新しくgenre_idカラムが作成されます。

##4 rails db:migrate
テーブルを作成、カラムを追加した場合は忘れずに

“`
$ rails db:migrate
“`

元記事を表示

railsチュートリアル 8章 初心者が意識すべき事

#初心者がrailsチュートリアル8章で学ぶべき事
1.Sessionについて
2.digestメソッドについて
##Sessionについて
ここでは様々なサイトを参照させていただきます。
まず一つ目のサイト

「Cookie」と「セッション」と「セッションCookie」の違い


二つ目
https://qiita.com/ozackiee/items/4ee774c81b2a0c571c05
そして二つ目のサイトをより理解するため+Webの基本を抑える意味でこの本はとても参考になりました。
Web技術の基本
![download.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619486/4521d43f-598b-9ec8-c3cf-d11291de2d52.jpeg)
Amazonサイト↓
https://www.amazon.co.jp/%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E5%9B%B3%E8%A7%A3%E5%BC%8F-%E3%81%93%E3%81%AE%E4

元記事を表示

Dockerを使用した既存のRailsプロジェクトの開発環境構築(Rails+Mysql)

#はじめに
今回はタイトルにあるとおりDockerを使用したRails+Mysqlの開発環境構築をしたので記事にします。

###対象読者
既存のrailsプロジェクトの開発環境にdockerを利用したいかた。(今回はdbをMysqlとしています。)dockerはダウンロード済みとしています。

###参考
こちらの記事を参考にさせていただきました!
[既存のrailsプロジェクトをDockerで開発する手順](https://qiita.com/kkyouhei/items/653760627bf9d4bc9e71)
[既存のRailsアプリにDockerを導入する手順](https://qiita.com/kenzoukenzou104809/items/b9e716204e0cd0cea447)

###環境
Mac OS

“`
docker -v
Docker version 19.03.8, build afacb8b

docker-compose -v
docker-compose version 1.25.4, build 8d51620a

“`

#ファイル構

元記事を表示

config.consider_all_requests_local=trueにしたら、Routing Error時に「作成したview」が表示されない。

「Ruby on Rails6実践ガイド」に沿ってアプリを作っていると、この仕様に気づかず4時間ほど詰まってしまったので記事にします。

#状況
Windows10home、VirtualBoxにUbuntu、更にDocker入れてRailsアプリ作成。
クライアントによって指定されたURLパスに対応するルーティングが存在しない場合(Routing Error)、デフォルトの
![Qiita4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/e87b8f90-6334-b26f-1db1-f9b61a765fb7.png)
ではなく、自作した
![Qiita3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/815bddcc-5b2d-8c90-e7e3-ad108b30b40a.png)

を表示させたいが、
![Qiita2.png](https://qiita-image-store.s3

元記事を表示

【全部入り】Vue.js + RailsAPIでブログアプリを作る(vuex,vue-routerも)

近々業務で本格的にvueを使うのでアウトプットとして、一通りの機能を持ったアプリを作ってみました。

vue-cliとRailsで作成したAPIを使ってブログアプリを作っていきます。

未熟なため用語の不適切な使い方など多数散見されると思いますが、あなたの熱い想いはコメント欄で吐き出しまくってください。めっちゃありがたく頂戴いたします。

## 主な機能

– 投稿
– 編集
– 削除
– vue-routerによるページ遷移
– vuexによる状態管理
– サクセスメッセージ 、validation

## 前提
– vueコマンドが使える。
– vueをかじったことがある(v-modelとかなんとなくわかる)。

詳しい説明は[公式ドキュメント](https://jp.vuejs.org/)などを参考にしていただけると?‍♂️

ちなみに自分は[Vue.js入門](https://amzn.to/2K9TnJ5)という本で網羅的に勉強しました。
技術書はリーダブルコード以来だったのですが、アホみたいにわかりやすかったです。

## 環境
Mac
Rails 5.2.4.2
rub

元記事を表示

Gemにモンキーパッチを当てるサンプル

Railsで開発していると使っているGemの挙動を一部変更したくなることが稀にあると思います。
gemに限らずですが、外部ライブラリの挙動を変えるために書く仕組みはモンキーパッチと呼ばれます。

モンキーパッチについては下記のクックパッドさんの記事がわかりやすかったのでご覧ください。
この記事でもこのやり方を参考にしています。

モンキーパッチはある程度やり方が定型化されていますが、たまにしか実装しないのでやり方を忘れてしまいがちだと思います。
そこで備忘録としてよくありそうなモンキーパッチの当て方をこの記事に残しておこうと思います。

# 対象のgem

モンキーパッチを当てるsample_gemは下記の通り。

## 仕様
* incrementというクラス変数を持っている
* 渡した数値を+1して返却する
* 数値以外を受け取ると`SampleGem::NoIntegerError`
* initializeではnumを渡してインスタンス変数

元記事を表示

【Rails Tutorial11章】アカウント有効化機能の実装手順を整理してみました【後編】

##はじめに
Railsチュートリアル11章の内容を、少しでも理解の助けとなればと思い、割としっかり目に整理しました!
__備忘録です。__

##前提
Railsチュートリアル1〜10章までの内容が完了していること。

##内容
Railsチュートリアル11章の__アカウント有効化機能の実装手順__を、前中後半の3回に分けて整理おります。
後編である今回は、__アカウント有効化機能の実装__をしていきます!

前編→[__AccountActivationsリソースの作成__](https://qiita.com/kurawo___D/items/233ed8b4f8749c95df9e)
中編→[__アカウント有効化メール送信機能の実装__](https://qiita.com/kurawo___D/items/051ce6f6bb0837e3481a)

##3.アカウントを有効化する
  ●AccountActivationsコントローラのeditアクションに、アカウント有効化機能を実装する処理を記述していく。
  
  ●editアクションへのテストを

元記事を表示

Chankoがproduction環境でもerrorをraiseするようにする

本番でもerrorを出せるようにしたくて調べました。

Chankoとは

https://github.com/cookpad/chanko
Cookpadが2013年(!)に開発したRailsのgem
便利で大好きなgem。ユースケースやらなんやらは[開発者ブログ](https://techlife.cookpad.com/search?q=Chanko)に詳しいです。

私が使っているのは以下
– 本番環境にdeployしながら、ユーザーには見せない(defaultを出す)

A/Bテストにも使えるのだろうが使っていない。使いたいなー。

何が問題か

Chankoはproduction環境ではerrorをraiseせず、握りつぶしてしまう実装になっている。
不完全なものを出してしまった場合であっても、内部でエラーが発生した場合は別途指定してあるdefaultの内容が実行されるため、ユーザーには最低限元の機能を提供できる。
リリース済みの環境で、新たな機能追加や一部変更、デザイナーとの協業などの際、ざっくりした内容でアップしてもユーザーに影響しない形で実装できるので、

元記事を表示

【AWS】Rails+MySQL+DockerアプリをEC2にデプロイする

ポートフォリオをやっとAWSにデプロイできたんですが、
地獄のような日々だったのでその孤軍奮闘を記します。

#前提
– Rails+MySQL+Dockerアプリがある
– Githubにpushされている
– AWS登録済

#参考サイト
主にこちらのサイトに沿って作業を行いました。
[DockerコンテナをEC2で起動と公開](https://qiita.com/takuyakawaguchi/items/057165b26fac88641ff1)

インスタンスの設定などはこちらも参考にさせていただきました。
[無料!かつ最短?で Ruby on Rails on Docker on AWS のアプリを公開するぞ。](https://qiita.com/at-946/items/1e8acea19cc0b9f31b98)

ぶっちゃけこの2サイトを参考にしていただければ特に問題なくコンテナは立つと思うのですが、
それ以前にも他のいろんなサイトを参考にしすぎて環境がかなりぐちゃぐちゃになっており、
中々デプロイできなかったです。

あんまりググりすぎるのもよくないですね。
似た様

元記事を表示

[Rails] csvファイルを使って駅のデータをデータベースに保存する方法

##はじめに
作成しているwebサービスで駅のデータが必要だったので色々調べたところ、データベースに保存できました。せっかくなので記事に残しておきます。

※筆者は初学者です。文章に誤りがあったらコメント等で教えてください。

4/18加筆 lonとlatの型を間違っていたため`:integer`を`:decimal`に変更しました。

##筆者の環境
Rails 5.1.7
ruby 2.5.7

※他に必要な情報ありましたら教えて下さい。

##csvファイルをダウンロードしたサイト
無料のものだったり有料のものだったりありますが、
私は[このページ](https://ekidata.jp/dl/?p=1)でダウンロードしました(この記事と同じようにしたい方は`駅データの2020-03-16`をダウンロードしてください)。
一部の情報は有料ですが、その情報も4,400円ってすごいですね。駅データの仕様書とかも同じサイトにあるので詳しくはそこで見てね。

他のデータ配布サイトも知りたいって方は[この記事](https://qiita.com/kou/items/e0d3fab106e

元記事を表示

ログインなしでもいいね機能を利用できるようにする

#目的
今回はログインなしでも閲覧者がいいね機能を利用できるように実装します。しかし、大きな注意点が1つあります。それはユーザーが無限回いいねを押せてしまうという点です。これでは正当な評価ができませんよね。ログイン機能があれば、それぞれのログインユーザーがそれぞれのツイートに対していいね1つのみ、という実装ができます。これに近い制限をかける必要性が出てきます。ここでは、例としてIPアドレスで制限する方法を実装します。

**※一通り投稿機能は実装できている前提で話します。上記のようないいね機能をゼロから作っていきます。**

※IPアドレスとは何か?については、以下のページをご覧ください。
https://qiita.com/MandoNarin/items/69f8e3e68ad834b62f6b

#概要
1. Likeモデル(テーブル)を作成する
2. アソシエーション
3. ルーティング
4. 投稿詳細ページ
5. likesコントローラー
6. エラー文
7. まとめ
#1. Likeモデルの作成
以下をターミナルで実行してください

“`
rails g model li

元記事を表示

メモランダム Rails tutorial 第4章

# Rails tutorial 第4章

# Rails風味のRuby
– 何度も立ち戻って理解しよう。

# 1.動機
– トピックブランチの作成、変更のコミット

## 組み込みヘルパー
– Railsの組み込み関数stylesheet_link_tagを使って、application.cssをすべてのメディアタイプで使えるようにしている。

## カスタムヘルパー
– 常套手段:タイトル空欄を防ぐため、基本タイトルを決めて、特定のページでは異なるタイトルに変更できるようなオプションを加える。
– ful_titleヘルパーの作成
– `<%= full_title(yield(:title)) %>`
– 以前のテストコードを更新し、”Home” という文字が表示されていないことを確認するテストを追加
– Homeページのビューからprovide の行を削除する必要がある。

# 2.文字列とメソッド
– Railsコンソールはirb (IRB: Interactive RuBy) を拡張して作られているため、Rubyの機能をすべて使うことができる

元記事を表示

railsチュートリアル 7章 初心者が意識すべき事

#初心者がrailsチュートリアル7章で学ぶべき事
1.SSLについて
2.Webサーバーについて
##SSLについて
railsチュートリアルでは
`config.force_ssl = true`
のコードだけ覚えておけば良いと思います。
ただ、この先自分のアプリを作ったり**Heroku**を使わずにデプロイするとき、Herokuが色々やっていてくれていた事を自分でしなければならないという事を把握はしておかなければならないと思います。
(現時点での僕も正直Herokuが具体的に何をしているのかは全くわかりません。
恥ずかしながら、**git push heroku**コマンドを打てば勝手にデプロイされています。
もっと勉強しないとなと日々感じています。)
##Webサーバーについて

Webサーバとは何か?仕組みやソフトウェアの種類をわかりやすく解説!


こちらのサイトを一読して進めれば良いかと思います。
#最後に
7章で大事なことは、プログラミング初心者がエンジニアとして仕事をする上では当たり前ですが、コードを打つだけではいけない事が身にしみる事、だと思います。
(今では

元記事を表示

Rails テストについて 1

#はじめに
テストに拒否反応があるので、まずは整理したいと思います。
少しづつ記事を書いていきます。

もうすでにご存知の方、省略の仕方等ご存知でしたら、ご助言願います。

#テストとはなんぞや?
– プログラムが意図した通りに動くことを確かめること

#大切なん?
– **超大切**と学びました。
– テストコードを書かなければ、プログラムは**想定していなかった動き**を見せる可能性が高くなる。

##何が起きてまうの?
例えば、毎日1万人が訪れるHPのシステムに、新機能を追加することになりました。
コードが完成し、いよいよ実際に動作しているHPに適用します。
しかし、テストコード無しで、つまりプログラムが想定していない動きをしました。(バグがあった・・・)
そのまま本番のHPに適用してしまったせいで、HPが停止してしまいました。
そして、毎日利用している1万人ものユーザーが迷惑を被ります。
そのことによる金銭的な損失や信用の喪失は、計り知れないものに・・・。
 
##だから必要やねん!
– テストは、上記のような事態を防ぐために必要となる。
– あらゆるケースを想定し、「バグが

元記事を表示

簡易パスワード機能(削除制限)

#簡易パスワード機能とは?
webサイト作成にあたって、ログイン機能なしで投稿機能を作りたいという要求もあるかと思います。しかし、誰でも自由に投稿できてしまうと不都合が生じます。削除、編集機能を付ける場合、勝手に他人の投稿をいじることができてしまうためです。したがって、これらの機能は投稿した人のみに制限する必要があります。ここでは、簡易パスワードを投稿者が設定し、ロックをかける仕様を実装したいと思います。一例として投稿(Tweet)に関して、削除キー(半角数字4桁)を設定していきます。
**※投稿機能は一通り実装できている前提で話します。ルーティングはresourcesなどで作っておいてください!**

#概要
1. Tweetテーブルにdeletekeyカラム(string)を追加する
2. modelで、バリデーション(deletekeyのルール)を設定する
3. 投稿フォームにdeletekeyの項目を追加する
4. 投稿詳細ページに、deletekeyの入力フォームと削除ボタンをセットで設定する
5. tweetsコントローラーのdestroyアクションにて、削除ボタンからパラ

元記事を表示

⑤AWS仮想サーバを利用する、AWSアカウント作成 + EC2インスタンス作成(2020.4時点)

ローカルでDocker、docker-composeを使用して開発環境を整えてきました。

これから、Docker+Railsアプリを本番環境に上げていきたいと考えています。
今回は、まず、AWSサービスを利用開始する+試しにEC2インスタンス作成してSSHログインする過程を記事にします。

#おさらい
ローカルRails+MYSQLアプリ開発中に、Dockerを実装する内容です。
[過去の記事]
[①Dockerを初めて導入して基本操作する (2020.4時点)](https://qiita.com/SakagamiKeisuke/items/4455631886b1c15a3b69)
[②Dockerを初めて導入してRails sする (2020.4時点)](https://qiita.com/SakagamiKeisuke/items/d64ee54c22378223659a)
[③Docker MYSQLにデモデータ(seed_fu)を投入する(2020.4時点)](https://qiita.com/SakagamiKeisuke/items/4ce1c4a4921abb57

元記事を表示

TECH CAMP入校

4月6日、ついにTECH CAMPへ入校。
それから本日までに教室へ通えたのは2日目のみ。新型コロナの影響で在宅オンライン学習となっています。コミュニケーションはSlackとZOOMで行われます。でも数あるスクールの中からわざわざ教室へ通うスタイルを選んだのに残念‥。

【大まかなここまでの学習内容】
・Webアプリケーションとは
・環境構築(準備)
・HTML&CSS
・Ruby
・Ruby on Rails

約1週間で叩き込まれます。ここまでを基礎カリキュラムとして、そこから中間試験、模試、本試験を実施。本試験に合格し応用カリキュラムへと進みます。まず中間試験が難しすぎて自信が打ち砕かれました。そこから試験に向けて猛勉強ですね。特にRailsの問題が出来なさすぎて課題となりました。

そして本試験。個人的には合格点に達したと思ったのですが、Rubyの動作が確認出来なかったとして配点無しに‥いや確認しなかった自分が悪いんですが、結構この中ではRubyは出来ているほうなので、苦手なRailsやCSSの問題に時間を割こうと思ってこのような結果に。これは今後のプログラミングをやっていく上

元記事を表示

OTHERカテゴリの最新記事