- 1. Rspecを動かすまでまとめ(簡易版: 単体・統合テスト)
- 2. deviseの導入方法について
- 3. アセットパイプラインに関わる画像が表示されないエラー
- 4. 【Rails】 初心者向け!gem ‘dotenv-rails’の使い方
- 5. Railsで通知機能を作る(①基本機能編)
- 6. プルダウンの作り方
- 7. 【Rails】ページネーションの実装
- 8. Couldn’t find User without an ID エラーを解決した
- 9. EC2インスタンスにRails + MySQL環境構築
- 10. Rails「paramsの使用法」
- 11. MacbookにRuby導入
- 12. アプリケーションの機能を外部にも使えるようにする場合は Facadeパターンを使う
- 13. *.js.erbファイルは読み込めているのに表示されないときの対処方法
- 14. Active Storageで追加した画像をjavascriptを使ってプレビューする方法
- 15. 計算量について意識してプログラムを書くための第一歩
- 16. 初めてのRuby On Rails その1
- 17. [Rails] deviseを日本語化する方法
- 18. Rails・Laravel・Docker・React環境構築一覧
- 19. Ruby on Rails の each文をマスターしよう!!(初投稿)
- 20. 7つのアクション以外にViewを増やす方法
Rspecを動かすまでまとめ(簡易版: 単体・統合テスト)
今回はテスト内容などにはあまり触れていません
Rspecを使ってテストするまでをまとめています。“`ruby:Gemfile
group :test do
gem ‘capybara’
gem ‘rspec-rails’
gem “factory_bot_rails”
gem ‘faker’
end
“`group :test do 〜 endの中を変更し、bundle install します。
“` :ターミナル
$ bundle install
$ rails g rspec:install
“`“`ruby:spec/rails_helper.rb
#最後の方に追加する
config.include FactoryBot::Syntax::Methods
end
“`
記述することでletを使用した際に、FactoryBotが使用できるようになります。“`ruby:factories/item.spec.rb
FactoryBot.define do
factory :”モデル名” do
“カラム名” { Fak
deviseの導入方法について
## はじめに
本日は、deviseの導入方法を記事にしたいと思います。
deviseとはログインやサインアップが実装できるGemです。
Gemを導入するだけで簡単にユーザー管理機能が実装できます。手順
1.deviseのインストール
2.テーブル作成
3.viewの作成
4.ストロングパラメーターの設定## バージョン
・Ruby 2.6.5
・Rails 6.0.0## deviseのインストール
まずは、Gemfileに
Gemfile
“`ruby
gem ‘devise’
“`
こちらを記述し、“`
# Gemをインストール
% bundle install
“`
ターミナルよりインストールを行います。次に、deviseの設定ファイルを作成します。
“`
# deviseの設定ファイルを作成
% rails g devise:install
“`
このコマンドは、追加したdeviseというGemの「設定関連に使用するファイル」
を自動で生成するコマンドです。次にUserモデルを作成します。
“`
# deviseコマンドでUs
アセットパイプラインに関わる画像が表示されないエラー
# 今回のエラー
制作環境は– Ruby on Rails
– unicorn
– AWS EC2
– NginxNginxを導入して設定をした後から、本番環境でトップページに表示される予定の画像が表示されない状態になっていた。
ログイン画面のアニメーションとして用意してあった音声ファイルが読みこまれていない。
一部では表示されている画像もあった。# 原因
アセットパイプラインの参照先の記述に問題があった。
### 問題箇所
今回の不具合箇所は2点– トップページの画像の記述
“`<%= image_tag("/assets/title_logo.png", class: "header-logo" ) %>“`– ログイン画面の音声ファイル
“`<%= audio_tag("/assets/submit", autoplay: false, controls: true, id:"audio_sub") %>“`#対処
行ったことは
1. 参照先URLを修正
2. git hubに修正をpush
3. 本番環境でプリコ
【Rails】 初心者向け!gem ‘dotenv-rails’の使い方
はじめに
—
最近当たり前のように使用している’dotenv-rails’のgemと環境変数という言葉ですが、使い始めた頃は何が何だかよく分からなかった覚えがあります。そんな自分自身の復習と、同じような初心者の方の参考になればと思い、なるべく一つ一つ丁寧に、また画像なども掲載しつつ投稿させていただいております。
dotenv-railsとは
—
環境変数を管理することができるgemです。
自身で作成したアプリケーションの直下に.envファイルを作成することで、パスワードなどネット上に公開させたくない情報を扱い、自動で読み込むことが可能です。
環境変数とは
—
参考書やネットで当たり前に出てくる「環境変数」という言葉。
私は当初この言葉の意味すら分かりませんでしたので、説明を掲載しておきます。
簡単に言うと、ネット上に公開させたくない情報を入れておく箱になります。この箱自体には、自身で任意の名前をつけることが可能です。つまり、ネット上に公開させたくない情報は、一度この環境変数という箱の中に入れ、コード上で使用することで、情報漏洩を防ぐことができます。
Railsで通知機能を作る(①基本機能編)
## やったこと
Railsでアプリを作っています。
通知機能を作りましょうという課題がありました。
初めて作る&覚えておくと応用が効きそうなので、いかにやり方をまとめます。なお、実行環境は以下の通りです。
– Rails `5.2.3`
– Ruby `2.6.4`## 仕様
以下のような仕様になっています。– `user`がフォローされた時
– `user`の投稿した`post`にコメントがついた時
– `user`の投稿に「いいね!」がされた時上記の条件でユーザーに通知を出します。
## DB設計
こちらのようになっています。
[![Image from Gyazo](https://i.gyazo.com/d7161965ac2a7b28150940fd8f4ceabc.png)](https://gyazo.com/d7161965ac2a7b28150940fd8f4ceabc)
データベース構造の詳細はこちらの記事をご覧ください。
[Railsのポリモーフィック関連付けを理解する](https://qiita.com/tanutanu/item
プルダウンの作り方
#プルダウンの作り方
select要素とoption要素を使用します。
“`html
“`select要素は・・・セレクトボックス
option要素は・・・プルダウンの選択肢これでプルダウンが簡単に作れます。
【Rails】ページネーションの実装
#ページネーションとは
一覧表示画面に表示するレコード件数が多くなると、目視での確認が困難になってしまいます。この問題を避けるための方法がページネーションです。
ページネーションとは、レコード件数が一定数を超えた場合に複数のページに分割して表示を行うことです。##kaminariのインストール
Railsでページネーションを実現するgemとして、kaminariがあります。今回はこれを用いてページネーションを進めていきます。
まずは、gemファイルに以下を追加。“`ruby:Gemfile
gem ‘kaminari’
“`bundleコマンドでkaminari gemをインストールします。
“`
$ bundle
“`##ページ番号に対応する範囲のデータを検索するようにする
PostsControllerのindexアクションを変更します。
このアクションでは、ページ番号がparams[:page]として渡されることを前提とします。ページ番号を用いて、データ範囲を検索する機能は、kaminariのpageスコープで簡単に行えます。
indexアクションを以下
Couldn’t find User without an ID エラーを解決した
rails初学者です。
現在オリジナルアプリを開発しております。
ユーザー詳細機能を実装しようとして、ユーザー詳細画面へのリンクを設定し、動作確認してみたら
「Couldn’t find User without an ID」
というエラーが発生したため、エラー解決をしました。## 環境
ruby ‘2.6.5’
rails ‘6.0.0’## ビュー
“`ruby
<%= link_to "#{current_user.name}", user_path(current_user) %>
“`このように、ログイン中のユーザーの名前を表示し、名前にユーザー詳細ページへ飛ぶリンクを設定しました。
## Usersコントローラー
“`ruby
def show
@user = User.find(params[:id])
end
“`
Usersコントローラーのshowアクションで、パラメータのidを受け取って
そのidに合致するユーザーを@userに格納しました。## 挙動確認
予想される挙動は、**「ユーザー名をクリックするとユーザー詳細ページに遷
EC2インスタンスにRails + MySQL環境構築
# はじめに
`AWS`の`EC2インスタンス`立ち上げたところからのサーバー構築手順です。
・設定用のツールをインストール
・Node.jsをインストール
・Yarnをインストール
・rbenvとruby-buildをインストール
・Rubyをインストール
・MariaDBをインストール(サーバーにDB設定する場合)
・Githubとの接続
・Unicornをインストール
・Githubからコードをクローン
・gemをインストール
・環境変数の設定
・アセットファイルをコンパイル
・本番環境でRailsを起動# 設定用のツールをインストール
`yum`というコマンドを使ってこのサーバに元々あるプログラムをアップデートします。“`
$ sudo yum -y update
“`環境構築に必要なパッケージを諸々インストール。(長いコマンド)
“`
$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-dev
Rails「paramsの使用法」
#はじめに
今回、テキストの一覧ページを作成する際、link_toとhelperよりparamsの使用方法を復習できたので共有します。#やりたいこと
・viewで各教材の一覧ページへのリンクを設定する
・controllerで各教材の一覧ページに適した教材を取得する
・helperで一覧ページのタイトルを表示する処理を書く#viewで各教材の一覧ページへのリンクを設定する
“`_header.html.erb
<%= link_to "Ruby/Rails教材", texts_path, class: "dropdown-item" %>
<%= link_to "AWS講座", texts_path(genre: "AWS"), class: "dropdown-item" %>
<%= link_to "PHPテキスト教材", texts_path(genre: "Php"), class: "dropdown-item" %>
“`
<%= link_to "表示名",次のアクションへ遷移するパス(パラメーター),class: "クラス名" %>
となるよう記述し
MacbookにRuby導入
# 環境
MacOS:Catalina
`MacbookPro`初期の状態から`Ruby`、`Rails`、`MySQL`をインストールします。手順は以下です。
・Zshをデフォルトに
・Command line tools導入
・Homebrew導入
・Rubyインストール
・MySQLを導入
・Railsを導入
・Node.jsの導入
・yarnの導入# Zshをデフォルトに
“`
# zshをデフォルトに設定
% chsh -s /bin/zsh# ログインシェルを表示
% echo $SHELL
# 以下のように表示されれば成功
/bin/zsh
“`
パスワード求められたらPCのパスワードを入力します。# Command line tools導入
以下をターミナルで“`
% xcode-select –install
“`
インストールをクリックして進める。# Homebrew導入
Homebrewというソフトウェア管理ツールを導入します。
以下をターミナルで。“`
% cd # ホームディレクトリに移動
% pwd #
アプリケーションの機能を外部にも使えるようにする場合は Facadeパターンを使う
業務で主に Ruby On Rails での開発を行っていますが、そこで得た知見や、失敗への対応などについて記します。
今回は「アプリケーションの機能を外部にも使えるようにする場合」の実装についてです。
## 状況
コンテンツ管理の都合上、弊社では「コンテンツを記載したHTMLを開発者以外が作成するが、その中の動的な部分に ERB 形式でコード埋め込んでいる」場合が有ります。
それによって、そのページの動的な部分の出し分けを行えるようになっている、という仕組みです。
しかし、そのコードからは「アプリケーション内のどのメソッドも呼べる」ようになっていたので、以下のような事が生じます。
* 開発の都合上、メソッド名などが変わった場合に、そのコード埋め込み部分でエラーや `DEPRECATED WARNING` が生じる
* そのことを防ぐために、実装時にあらかじめ「組み込まれているコンテンツの中身」もチェックする、という作業が生じるこれらの幾つかの面は「運用方法の改善」での対処が考えられますが、そもそも論として
> そのコードからは「アプリケーション内のどのメソッドも呼べ
*.js.erbファイルは読み込めているのに表示されないときの対処方法
– 「Completed 200 OK」となっているのに*.js.erbに書いたjavascriptのコードが動かないとき。
– javascriptのエラーも発生していないとき。## 原因
https://github.com/rails/rails/issues/33115
どうやらrails-ujsが求めているContent-Typeが一致しないことが原因っぽいです。## 対策
### 【対策1】レイアウトファイル名を変更する`views/layouts/*.erb`
↓
`views/layouts/*.html.erb`###【対策2】render時に`layout: false`を指定する
“`ruby:*_controller.rb
def create
@sending_user = User.find(current_user.id)
@receiving_user = User.find(params[:user_id])
new_like_balance = @sending_user.like_balance – 1
Active Storageで追加した画像をjavascriptを使ってプレビューする方法
# はじめに
active Storageを使って保存する画像を保存前に表示させて確認したいと思って調べたもののまとめです。# 前提
すでに画像保存機能は出来上がっている# javascriptファイルの追加
app/javascript/packsの中にプレビュー用のファイルを追加します。今回、名前はpreview.jsとします。# preview.jsの読み込み
前述で追加したpreview.jsをpacks内application.jsで読み込みます。
app/javascript/packs/application.js“`js
require(‘./preview’)
“`# 読み込まれたときに動作する関数を定義
まずは動作ようの記述を。
app/javascript/packs/preview.js“`js
document.addEventListener(‘DOMContentLoaded’, function(){
});
“`
# 画像を表示するビューファイルに画像表示スペースをつくるapp/views/messages/_for
計算量について意識してプログラムを書くための第一歩
#はじめに
プログラミングをやり始めてから間もなく1年になりますが、基本的な知識である計算量について気にすることがほとんどなかったことが発覚したので、しっかり勉強しようと思いました。
at_coderの問題を例に計算量を意識しない書き方と意識した書き方での性能比較を行います。
計算量意識するの大事だなという実感を持ってもらえたら嬉しいです。#計算量を意識していないコード
下記の問いに答えるように実装していきました。
まずは、特に計算量を意識することなく実装していきます。>正の整数Kが与えられます。正の整数の 3つ組 (A,B,C)であって、ABC≤Kなるものの個数を求めてください。 ただし、A,B,Cの順番が異なるだけの組も異なる組として数えます。
###サンプルコード1(自分が元々書いていたもの)
実装方針は下記です。
A,B,Cのそれぞれの変数に対して、1からKまでの数を順次代入していき、それぞれの場合のAとBとCの積がK以下の場合の数をカウントしました。“`ruby
n = gets.chomp!.to_i
count = 0n.times do |i|
初めてのRuby On Rails その1
# Ruby On Railsとは
>オープンソースのWebアプリケーションフレームワークである。RoRまたは単にRailsと呼ばれる。その名にも示されているようにRubyで書かれている。またModel View Controller(MVC)アーキテクチャに基づいて構築されている。
[Ruby_on_Rails – Wikipedia](https://ja.wikipedia.org/wiki/Ruby_on_Rails)初めてRubyに触れるので、Progateを使って学習してみました。忘れそうなことや頭を整理するために、記載しています。
[Ruby on Rails5 – Progate](https://prog-8.com/languages/rails5)## Railsアプリケーションの作成
以下コマンドにより必要なファルダ等が作成される“`terminal:ターミナル
rails new app_name
“`
### ツリー構造
app_name/
├ app/
├ config/
├ db/
└ その他##
[Rails] deviseを日本語化する方法
#前提
Railsにdeviseのgemを導入していること。#日本語化する方法
##Gemfileに追記する
`gem ‘devise’` の後に以下を追記して、 `bundle install` します。“`:Gemfile
gem ‘devise-i18n’
“`##devise.rbを編集する
“`:config/initializers/devise.rb
config.scoped_views = true
“`そして `rails s` でサーバーを再起動します。
##devise.views.ja.yml を作成する
以下を実行すると `config/locales` に日本語化ファイル(`devise.views.ja.yml`)が作成されます。“`
$ rails g devise:i18n:locale ja
“`
Rails・Laravel・Docker・React環境構築一覧
本記事は、[Techpit](https://www.techpit.jp/)がQiitaで投稿している環境構築記事のまとめです。
今後も適時更新していきます(最終更新日:2021/2/26)
**「〇〇の環境構築も掲載してほしい!」**
**「〇〇のエラーが解決できない」**
等ありましたら、ぜひコメントしてください。## 記事一覧表
### Ruby on Rails
[0から Ruby on Rails の環境構築【macOS】 (Homebrew のインストールから Rails のインストールまで)](https://qiita.com/techpit-jp/items/1bcd0f4106330b5b827c)[0からRuby on Railsの環境構築【Cloud9】(Rubyのバージョン変更からRailsのインストールまで)](https://qiita.com/techpit-jp/items/ac94b6ed80b77336fdf8)
### Laravel
[【最新版】はじめてのLaravel!Laradockを用いたLaravel開発環境構築](
Ruby on Rails の each文をマスターしよう!!(初投稿)
### アジェンダ
– この記事の対象者
– 開発環境
– シンプルなコード例
– コード全体の流れ
– よくある記述ミス
– つまづきがちなエラー
– ここで抑えるべき用語
– 最後に### この記事の対象者
– Railsを学び始めて1か月程度
– each文って結局どのように動いてるのかわからない### 開発環境
– Rails5
– windows10
– vagrant### each文の最もシンプルなコード例
“`投稿した配列.
id: 1
title: タイトル
body: ボディid: 2
title: title
body: bodyid: 3
title: たいとる
body: ぼでぃ“`
“` test.controller.rb
def index
@books = Book.all
end
“`“`index.html.erb
<% @books.each.do |book| %>
<%= book.id %>
<%= book.title %>
<%= book.body %>
7つのアクション以外にViewを増やす方法
## はじめに
オリジナルアプリケーションを作成中に、疑問に思いました。
「7つのアクション以外にviewって作れるのか?」
初心者なら必ずこう思うはず、
そして、作れないことはないはず!!
調べてみたら作れました!!忘れないために記事に残したいと思います。
やることは、以下の3つになります。
1.コントローラーへの記述
2.ルーティングの設定
3.ビューの作成順を追って説明します。
## バージョン
・Ruby 2.6.5
・Rails 6.0.0## コントローラーの設定
まずは、コントローラーに新しいアクションを設定します。
“`ruby
def index
@post = Post.includes(:user).order(“created_at DESC”)
@post_like = Post.includes(:post_likes).sort {|a,b| b.post_likes.size <=> a.post_likes.size}
enddef new
@post = Post.new
end