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

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

部分テンプレートの実装

##部分テンプレートとは
同じHTML構造の部分を共通化することによって、無駄なくビューファイルを作成することができます。この共通化された部分を、 部分テンプレートといいます。

部分テンプレートを使用した場合、そのHTML構造を他のビューでも使いまわすことができるという利点も存在します。

また、部分テンプレートのファイル名は必ずアンダーバー「_」から始まります。

##部分テンプレートを使用したい場所を切り取る
例えば、以下のeach文の中身を切り取る(command+x)。

“`app/views/posts/index.html.erb
<% @posts.each do |post| %>

元記事を表示

Railsでワクワク個人開発  第2回:画面遷移図とログイン実装

# 画面遷移図を書こう

 人の記憶は儚いもので、各所に散らされたコードを見てもなんら思い出せることがない。githubのコミット履歴には確実に残っているが、そのときの私の思いはどこにあるのだろう。個人開発の記録を少しずつ記していく。

 画面遷移図を書いた。drawioという便利なソフトがあった。vscodeの拡張機能としても利用できたので大変ありがたい。
 この記事にとても詳しく書かれている。
 https://qiita.com/riku-shiru/items/5ab7c5aecdfea323ec4e

 ![スクリーンショット 2020-08-11 22.58.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104211/9b335231-c27e-3cbb-77aa-5ab0b196ece1.png)
 drawioの操作感はわりと優れている。さっさと好きな絵がかける。githubにも図形がそのまま反映されるといいな。なにか方法があるはずだ。

 とりあえず風呂敷は広げるべきだ。まだ実装

元記事を表示

Rails Tutorialを咀嚼する【第3章 ほぼ静的なページの作成】

#3.1 セットアップ

【演習】
1.BitbucketがMarkdown記法のREADME (リスト 3.3) をHTMLとして正しく描画しているか、確認してみてください。
2.本番環境 (Heroku) のルートURLにアクセスして、デプロイが成功したかどうか確かめてみてください。

⇒そのままやってみてください。
#3.2 静的ページ
■コントローラ
コントローラとは (基本的に動的な) Webページの集合を束ねるコンテナのこと。
→ちょっと意味が分からない。

■rails generate controller StaticPages home help
コントローラーにstatic_pages_controller.rbが生成される。
routes.rbに
・static_pages/home
・static_pages/help
が生成される。

この時点でアドレスバーに「static_pages/home」と入力すれば移動する。
異動する先はビューの「home.html.erb」。
※helpも同様。

■HTTPメソッド
GET、POST、PATCH、DELETEの

元記事を表示

Global Service でのタイムゾーンの設計

# タイムゾーン問題

> 「タイムゾーンはマルチスレッドプログラミングのようにそれ自体が難しさを抱えている」という前提に立つ必要があると私は考えています。
  – グローバルサービスでのタイムゾーンとの向き合い方
  https://quipper.hatenablog.com/entry/2016/12/05/090000

## 前提となる状況
Globalにスケジューリングや実行ログを伴うようなサービスを構築しています。
ユーザーのLocaleと同じくタイムゾーンに応じて時間を表示し、スケジュール実行を予約します。
サーバサイドでは、まとめて処理を行うため、1つのデータベース上に複数のタイムゾーンによって設定・生成された時間が存在します。

## 結論

1. 保存される時間のタイムゾーンを UTC に統一する
2. サーバサイド(Rails)で扱うタイムゾーンをUTCに統一する
3. DBのカラムはDateTime型で保存する
4. フロントエンドとサーバサイド間はUnix Timestampに統一する
5. フロントエンドでは、利用者の設定に応じてタイムゾーンを変換表

元記事を表示

html.erbファイルでコメントアウトする(備忘録)

#プログラミングの勉強日記
2020年8月16日 Progate Lv.226

#複数行コメントアウトしたいとき
 `<%# %>`中に書かれた文章を全てコメントアウトすることができる。

“`erb:html.erbファイル
 <%# コメント %>

<%#  コメント  %>
“`

#1行コメントアウトしたいとき
 偉業だけコメントアウトしたいときは`#`を使える。`#`でコメントアウトするときは、Rubyのコメントアウト機能なので`<% %>`の中でのみに使える

“`erb:html.erbファイル
<%= 表示される。 #コメント %>
“`

#コメントアウトしてる内容が見えてしまう
 HTMLで使われているコメントアウト(``)の方法。クライアント側からコメントアウトしている内容が見えてしまう。

“`erb:html.erbファイル
-–>
“`

元記事を表示

ActiveRecord::RecordInvalid:Validation failed: Account has already been taken

###エラーの内容
既にAccountというデータがあるから、ダメだよ。バリデーションで問題が起きてますよという内容

###解決策
“`rb
rake db:migrate:reset
“`

これでテーブルの内容の削除とshemaからの再作成ができるので解消できました。

元記事を表示

【Rails6】rails sでサーバーを起動したまま、コードの書き換え、動作確認をしたい

ハードはMacBook Air, 開発環境はVScodeを用いています。
ruby2.6.5
rails6.0.3.2

#発生している問題

###rails s でサーバーを起動させた状態でコードを変更しても、サーバーを再起動しなければ変更が反映されない

#原因

config/environments/development.rbの記述が原因です。

“`:config/environments/development.rb
Rails.application.configure do
〜省略〜

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

end
“`

#対処法

次のように書き換えます。

“`:config/environments/development.rb
Rails.application.configure do
〜省略〜

config.file_watcher = ActiveSupport::FileUpdateChecker

end
“`

これで解

元記事を表示

DBに関して何も分かっていないことが判明したので、勉強してみた

CircleCIを勉強中、DBのエラーを処理しようとした時に、DBの接続関係やら用語やらを理解していないことに気づいて勉強しているので、そのまとめとして。同じような状況の人に役に立てば嬉しいです。

*加筆中

# host
hostとは、
hostとよく見る、「localhost」は「127.0.0.1」を表してるみたいです。これは、ループバックアドレスと呼ばれ、自分自身を表す特別なIPアドレスです。つまり、

localhost = 127.0.0.1 = 自分自身を表すIPアドレス

です!

# socket
socketとは、

# config/database.ymlのRAILS_MAX_THREADSってどこに書いてある??

# pool
poolってコネクションの上限値らしい。けど、コネクションって1個じゃないですか?ww

# port

あと、プログラマーになりたいと思っています。自社開発企業のインターンや就職(2020/08現在、大学院1回生ですが、研究そんなに楽しくないので就職できるのであれば大学院は辞めるつもりです。)の話があればノリノリで聞かせてい

元記事を表示

ancestryを使って商品カテゴリー機能を実装する①(準備編)

# はじめに
・某プログラミングスクールのチーム開発でフリマアプリを作りました。
・商品カテゴリー機能を実装するのが非常に難しかったので備忘録として書きます。
・やることが多いので複数回に分けて書きます。
・僕自信、かなり詰まりました。なので、同じような状況の初学者の方の参考になれば幸いだと思い、記事にします。
・間違いなどあればご指摘いただけると幸いです。

# 完成形はこれです
・親カテゴリーを選択すると子カテゴリーが表示され、子カテゴリーを選択すると孫カテゴリーが表示され、サイズが関係するものについては孫カテゴリーを選択するとサイズが表示される
https://gyazo.com/97e3bdfac114bcced73aa3840f02801c

# ところでancestryって何
公式ドキュメント
https://github.com/stefankroes/ancestry
【翻訳】Gem Ancestry公式ドキュメント
https://qiita.com/Rubyist_SOTA/items/49383aa7f60c42141871
>AncestryはRuby on R

元記事を表示

Rails render redirect_to

#はじめに
今回はRailsでよく使われるrenderとredirect_toの違いについて。

#render
renderはコントローラー内でviewファイルを決定しレンダリングされる。

“`ruby

render :edit
“`

この場合だとviewファイルのeditに対応するhtmlファイルが呼び出される。

###別のコントローラーからの呼び出し
別のコントローラーからの呼び出しも可能でその場合、app/viewsを起点とするフルパスを渡すことができるので、出力したいテンプレートをフルパスで指定する。

“`ruby

render “users/show”
“`
`app/views/users`からviewテンプレートを呼び出すことができる。

###任意のファイルの指定
現在のディレクトリの外部にあっても指定することが可能。

“`ruby

render “/xxx/apps/user_directory/current/app/views/users/show”
“`

###様々な記述方法

> render :edit
render acti

元記事を表示

Active Storageでキー名を指定するには

環境: Rails 5.2 / 6.0

RailsのActive Storageを使ってAWS S3にファイルを保存すると、自動的に `whZ3Y8VP3XV8WGqjyK2dyZ5j` のようなキー名になります。これを `images/developmenet/whZ3Y8VP3XV8WGqjyK2dyZ5j` のようにフォルダ分けする方法です。Rails Guildesには載っていませんが、Active Storageのソースコードを見てて気付きました。

次のモデルがあるとします。

“`ruby
class User < ApplicationRecord has_one_attached :image end ``` ふつうの使い方では、`user.image.attach` に `ActionDispatch::Http::UploadedFile` を渡します。 ```ruby user.image.attach(file) ``` `user.image.attach` には `ActionDispatch::Http::UploadedFile` だけで

元記事を表示

rbenvでRubyをインストールしたがバージョンが変わらない時の対処法

## 環境
MacOS Catalina
Rails 6.0.3.2
Ruby 2.7.1(2.6.3)

## 現象
前日までは特に問題なかったが、翌日PCを起動し「Rails s」すると、
「Your Ruby version is 2.6.3, but your Gemfile specified 2.7.1」のエラーが発生。

Rubyのバージョンを確かめると
Ruby -v → 2.6.3
rbenv –version → 2.7.1

「rbenv global 2.7.1」としたが切り替わらない・・・。

## 対処法
# Rubyの参照先の確認
“`
$ which ruby
/usr/local/bin
“`

rbenvでインストールした場所と違う場所を参照しているので、場所を変更する。

# 参照先の変更
“`
$ vi ~/.bash_profile
“`

ファイルの状態は下記の通り。

“`
export PATH=/usr/local/bin:$PATH
export PATH=”~/.rbenv/shims:/usr/local/bin:$P

元記事を表示

【テストコード学習・アウトプット】

▼今回のカリキュラムでは前章のカリキュラムで作成したアプリケーションのテストコードを記述。

・前回は簡易Twitterを作成したのでそのテストコードを学びました。
エンジニアの仕事で駆け出しに任されることが多いそうなので気合を入れて取組ました。

・describe it exampleの整理 expect(X).to eq Y
・FactoryBotでインスタンスの整理
その他には、before、Fakerでの生成方法。
contextの状況整理。

◆単体と結合のテストコードの作成。
・最初に単体でモデル、コントローラーを作成。
・その後に上記で学んだインスタンスや文字列、gemを使い結合テストコードを作成。
・ユーザー、ツイート、コメントの結合テストコードを作成。
・最後にサポートモジュールでログインの簡略化。

▼まとめ
・文字にしてみると量やボリュームが少なく感じましたが、実際に一からファイルを作成してテストコードを書いていく作業は、初心者の私にはものすごく大変でした。。。。
ただ、ターミナルでその都度コードを入力した後に作動する動きをみると自身の成長やプログラミングへの興

元記事を表示

railsにbootstrap-vueを導入する

事前にrailsでプロジェクトは作成済みとします。

## 環境
“`
Ruby 2.5.1
Rails 6.0.3
“`

## インストール
bootstrap-vueをインストール

“`
$ yarn add bootstrap-vue
“`

vue.jsのインストール

“`
$ rails webpacker:install:vue
“`

## プロジェクトに導入する
“`view/layout/application.html.slim
doctype html
html
head
title
= full_title(yield(:title))
= csrf_meta_tags
= csp_meta_tag
= stylesheet_link_tag ‘application’, media: ‘all’, ‘data-turbolinks-track’: ‘reload’
//= javascript_pack_tag ‘application’, ‘data-turbolinks-track

元記事を表示

Rails APIでbooleanが勝手にcastされバリデーション通過するのを防ぐ

# 事象

Rails APIでboolean型のカラムに対しcreate, updateした際、boolean以外の型は弾くようにしたい

“`powershell
$ rails -v
Rails 6.0.3.2
“`

“`powershell
$ rails g model Post body:text opened:boolean
“`

“`ruby:app/models/post.rb
class Post < ApplicationRecord validates :opened, inclusion: { in: [true, false]} end ``` こうすれば本来、boolean以外は弾かれる、はずが… ```powershell $ curl localhost:3000/posts -X POST -H "Content-Type: application/json" -d '{"body": "hoge", "opened": "moge"}' {"status":"success","data":{"id":1,"body":"ho

元記事を表示

「1つの投稿に対し複数の画像を紐付ける機能の実装」

目的

某スクールの複数投稿の実装の仕方がとても苦労したので、メモとして残して置こうと思います。
これが、何処かの誰かの役に立てれば嬉しいです(笑)

完成形

これが完成形です
ファイル名
動画も貼れたので掲載します。
![Shimokita.php](https://i.gyazo.com/69f9ddbc6cb827086b751bb946f06b6b.gif)

ステップ

①. モデルを作成していきます。
②. マイグレーションファイルの作成をしましょう。
③. imagesモデルで画像をアップロードできるようにしていきます。
④. 画像を保存させる場所をuploaderを作成します。
⑤. モデルに追記します。
⑥. ネストした関連先のテーブルをまとめて保存出来るように記載します。
⑦. fields_forを以下のように使用して出品画面のHTMLを記載します。
⑧. SCSSを記載します

元記事を表示

chart.jsとgonでグラフを作成する

railsのcontrollerからgemのgonで変数を渡し
chart.jsでグラフを作成したので記録に残します。

##chart.js読み込み

application.htmlに貼り付け

“`