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

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

enumで下書き、公開機能を実装

いろいろやったので備忘録

## 概要 要件
– 美容室のページに下書き機能を実装する
– デフォルト下書き、編集→保存、及び、ボタンでステータスを変更できるようにする
– その美容室に紐づくモデル(スタイリスト、スタイル、メニュー)も非公開にする
– ログインしていれば下書き状態のものも見ることができる
– ログインしていても他のユーザーの非公開ページは見れない

Bootstrap4、Rails6

## 完成(目標物)
スクリーンショット 2020-03-21 10.43.48.png

スクリーンショット 2020-03-21 10.44.42.pngサンプルアプリケーションを作ろう!!〜Railsチュートリアル3章〜

#ほぼ性的なページの作成
あのーうち実家暮らしで家でUDEMYとかYOUTUBEとかでプログラミング動画みることあるんだけど、その時に「静的なページが作れます〜静的なページが〜」とか連呼されると若干気まずくなるからほんと辞めてほしいと思う今日この頃、、、NSぱんだまんです。アニメとか映画とかはそういうシーン来るのだいたい分かるからボリューム落としたりするんだけどまさかこんな真面目な動画でくると思わなかったからいちいち弁明するのもあれだし、すぐ自分の部屋に逃げました。

さて今回は第3章〜ほぼ静的なページの作成〜ですね。
まず静的、動的ってようわからんかったので調べました。
静的、、、何度アクセスしても同じものが表示されるWebページ
動的、、、アクセスした時の状況に応じて異なる内容が表示されるページ
ということですね。静的なページは企業紹介のサイトとか見るユーザーに同じものを見せたいときに使用される特に動きのないページ。動的ページはSNSサイトとか掲示板とかユーザー毎によって表示される内容が異なるページのことを指すんだって。

まずセットアップします〜ここは何回もやってるから少しずつ慣

元記事を表示

よくわかんないけどToyアプリを作ろう!!(Railsチュートリアル2章)

#前回までのあらすじ
やりたくねーなと目を背けていたRailsチュートリアル。。真剣に取り組み始めました。。
なんとか環境構築、railsの導入、git.GitHubの導入に成功しました。
*ちなみにHerokuは一旦とばしました。とりあえず一周して余裕でたらやります。
今回から第2章やります。
#さあやります。
よーし頑張ってくぞー!!
内容としてはscaffoldっていうスクリプトを使ってTOYアプリっていうのを作っていくみたい。
うーん安定の意味わからんなー。。
とりあえずscaffold(スキャフォールド)っていうのは。。。

railsアプリケーションの開発をする際にはMVCを作っていき、更に必要なルーティングを作成していく必要がある。これらの作業をまとめて行って、簡単にアプリケーションの雛形を作ってくれる機能のこと。scaffoldを使用することで素早くrailsアプリケーションを作ることができる。

なるほどねー。とりあえず内容を深くっていうよりはrailsのアプリケーションを素早く作って慣れましょう、みたいな章なのかな?

#アプリケーションの計画
はじめにどんなアプリ

元記事を表示

ActiveModelSerializers のドキュメントを翻訳しました

# 概要
gem [active_model_serializers](https://github.com/rails-api/active_model_serializers) の version [0-10-stable](https://github.com/rails-api/active_model_serializers/tree/0-10-stable) のドキュメントを翻訳しました。
Rails で API を作成するときに active_model_serializers を使うことも多いと思うので、参考になれば幸いです。

# 目次

– [**Adapters**](#adapters) [原文](https://github.com/rails-api/active_model_serializers/blob/0-10-stable/docs/general/adapters.md)
– [Built in Adapters](#built-in-adapters)
– [Attributes(デフォルト)](#attributes%E3%83%

元記事を表示

breadcrumbs_on_railsを使ったパンくず実装 その② オリジナルviewを使おう

パンくず実装の続きです。
といっても備忘録としての記事ですので、ほぼほぼサイトを参照してやったことを思い返すつもりで書いています。

ちなみに今回は、lib直下をいじりますので、少し習ったことがないことをしました。
ではでは、やっていきましょうか

まずは、custom builder を作りましょう。
といってもこの名称はなんでも良いです。
ただし、ほぼほぼコードの直打ちで作りますよ。

“`ruby:/lib/custom_breadcrumbs_builder.rb
class CustomBreadcrumbsBuilder < BreadcrumbsOnRails::Breadcrumbs::Builder def render @context.render '/shared/breadcrumbs', elements: @elements end end ``` これは、views/sharedフォルダにオリジナルのviewを呼びにいっているという記述です。 render形式のため、elements:@elementsの要素をbreadcrumb

元記事を表示

【Rails】bundler-auditの使い方

# `bundler-audit`とは

`bundler-audit`はプロジェクトで利用しているGemの脆弱性の有無をチェックしてくれるGemです。
システムの脆弱性チェックの一つとして利用できますね。

# 検証した環境

– Ruby 2.7.0
– bundler-audit 0.6.1

# 準備

## bundle install

Gemfileに以下を追加して`bundle install`

“`ruby:Gemfile
group :development do
gem ‘bundler-audit’
end
“`

“`sh
$ bundle install
“`

## 脆弱性チェックに使用するDBを更新する

脆弱性チェックを実行する前に、`bundler-audit`が使用するDBの更新を行いましょう。

“`
$ bundle exec bundler-audit update
“`

このコマンドでは、実際には`$HOME/.local/share`ディレクトリ配下に[rubysec/ruby-advisory-db](https:/

元記事を表示

TDD(テスト駆動開発)って??

TDDについてのアウトプットを行います。
#TDDとは?
簡単に言うと、
####①テストコード ②実装、リファクタリングの順で多なっていく事

#なんで、先にテストコードを書くん?
####実装と修正のサイクルを定期的に行うため
その必要性は、常にエラーを意識しながら実装していくためです。
結果、その都度エラーを発見することができると言うことですね。
#どんな方法で行うん?
####①失敗のコードを書く 
####②成功のコードを書く 
####③リファクタリング
##失敗のコードを書く意味って何なのでしょうか?
####『エラーになると思っていたコードがエラーにならない!?』ってな事が起きないようにするためですね。
例えが合っているか怪しいですが、
(例)1+1=4とエラーコードを書きました。しかし、返ってきた答えがエラーではなく『成功』してしまう。ってな異常事態を防ぐためですね。
##成功のコードを書くときは?
この時に注意することは、最低限のコードでいいからテストを成功させる事。
消して整ったコードを書いて成功させなければならないと言うわけではないと言う事です。
#終わりに

元記事を表示

bundle install でNokorigiインストール時に「Gem::Ext::BuildError: ERROR: Failed to build gem native extension.」エラーが出た場合の対処方法

`bundle install`でnokogiriインストール時に下記のようなエラー

“`
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
“`

が出てしまった場合

gem install時であれば `–use-system-libraries` オプションを付けて再実行してみるところですがbundlerの場合はどうすればいいかというと

`bundle config –local build.nokogiri –use-system-libraries`

というような感じでコマンドを実行します。

`–local`オプションは`app/.bundle/config`へ設定を書きます。
`–global`オプションは`~/.bundle/config`に書くようです。

まあよほどの事情がない限り、プロジェクトごとの`.bundle/config`に書いておくほうが良いと思います。その他、環境変数にも定義できます。

### bundle configの優先順位

bundle

元記事を表示

インクリメンタルサーチ

##インクリメンタルサーチとは
文字の入力のたび、自動的に検索が行われる検索方法のことです。
##インデックスでデータの検索を高速化
テーブル内で検索が頻繁に行われるカラムにインデックスを設定することで検索の高速化します。
今回はtweetsテーブルのtextカラムにインデックスを貼ることで、データの検索を高速化します。
インデックスはデータベースの機能の一つで、テーブル内のデータ検索を高速化することができます。インデックスはカラムに対して設定することができ、設定したカラムでの検索が高速になります。
ちなみにインデックスを設定することを、「インデックスを貼る」と言います。
##インデックスを設定
textカラムに対するインデックスを設定するので、tweetsテーブルに対してインデックスを貼るためのマイグレーションファイルを作成します。
ターミナル

“`
$ rails g migration AddIndexToTweets
“`
次に作成したマイグレーションファイルを編集します。

“`2020xxxxxxxxxxx_add_index_to_tweets.rb
class

元記事を表示

超最低限のRailsアプリをテストする(モデル編)

# この記事の基本的な方針
テストは重要です。
なぜなら、人間は不完全であるからです。
ではもし自分が完全であったら、テストは不要でしょうか?
いいえ。なぜなら他人にコードの妥当性を証明しなくてはならないからです。

“`
テストの目的以下です。
 ①コードの妥当性を自分で確認すること
 ②コードの妥当性を他人に示すこと
““
ここでは別記事、[超最低限のRailsアプリを丁寧に作る(もう一度きちんと復習して初心者を卒業しよう)](https://qiita.com/annaPanda8170/items/8856425be9d563fbffa7)で作ったアプリをテストします。

手を動かしながら読みたいようでしたら、以下でこの3画面アプリを手に入れてください。

“`bash:Terminal
$ git clone https://github.com/annaPanda8170/minimum_rails_application.git
$ bundle install
$ bundle exec rake db:create
$ bundle exec rake db

元記事を表示

【Rails】スレッドのレス投稿機能

プログラミング初心者です。
Ruby on Railsで掲示板のスレッドにレスを紐付けて投稿していく機能を作成しました。
結構苦戦したので、備忘のため貼り付けます。

【スレッド(親、tree)controller】

“`
def show
@tree = Tree.find(params[:id])
@response = Response.new(:tree_id => params[:id]) #ここを投稿用に使う
@responses = @tree.responses.all
end
“`

【レス(子、response)controller】

“`
def create
@response = current_user.responses.new(response_params)

if @response.save
redirect_to tree_url(@response.tree_id), notice: “投稿「#{@response.text}」を登録しました”
else

元記事を表示

GoogleMapsAPIの経度緯度の取得について

##前提
GoogleMapsAPIにより、GoogleMapが表示できていること。
検索した場所の保存ができる一連の流れ(コントローラ、データベース等)を作成していること。

##やりたいこと
上記APIを使用し、webアプリの機能の一つとして実装したいことは下記のとおり。

①検索フォームに、店名や地名などの名称を入力し検索すると、地図上にマーカーが立つ。
②その場所を保存する。
【詳細】
別途用意した、保存フォームに検索フォームに入力した名称が自動入力される。そして①の検索の際、取得した緯度経度で場所の保存を行う。

##環境
開発環境 AWScloud9
rails 5.1.6

###①について
https://qiita.com/yoshi_yast/items/521c1f36306a180f45dd を参考にさせていただき、名称検索でマーカーを立てるところまで実装できた。
ちなみに、マーカーは、http://foonyan.sakura.ne.jp/wisteriahill/google_icons/index.html から使用した。

###②について
①に追加する

元記事を表示

[学習ログ]CVE-2020-5267について簡単に調べてみた[Rails]

# tl;dr
– CVE-2020-5267とは、__バージョン6.0.2.2および5.2.4.2以前のActionViewに存在する脆弱性__である。
該当バージョンのActionViewにおける__jおよびescape_javascriptメソッドにXSSの脆弱性が存在する可能性__がある。

– railsの場合は__Gemfile中のrailsをバージョンアップすることで対策が可能__`(6.0.2.2 or 5.2.4.2)`。

昨日、Githubから依存関係の脆弱性を指摘する以下のようなアラートが通知された。

>We found potential security vulnerabilities in your dependencies.
Only the owner of this repository can see this message.
Manage your notification settings or learn more about vulnerability alerts.

セキュリティアラートを確認すると、actionview

元記事を表示

Railsのtext_fieldにCSSをあてる方法

## text_fieldにCSSってどうやってあてるんだっけ?
Railsアプリケーション作成時にフロント部分を作成していた時に

“`ruby:example.haml.html
.item__name
商品名
.name–input
= f.text_field :name, placeholder: “40文字まで”
“`

のようなhamlを作成していざscssを記述しようとしたときに
この`text_filed`にどうやってCSSをあてるのかが
ふと考えると分からなかったんです。

同じような`number_field`や`submit`などにも使えるやり方なので
是非覚えておいたほうがよいです。

##そもそも`text_field`で作られるHTMLは何なのか?
上の`= f.text_field :name, placeholder: “40文字まで”`で作られるHTMLを
chromeの検証で確認してみると
`

元記事を表示

Railsチュートリアルメモ – 第12章

(メモの目次記事はこちら)[https://qiita.com/yokohama4580/items/dedfd5510080273dc2a0]

(公式Railsチュートリアル第12章へのリンク)[https://railstutorial.jp/chapters/password_reset?version=5.1#cha-password_reset]

## サマリ
– パスワードの再設定
– パスワード再設定メールの送信
– トークンによる認証とパスワードの再設定

## ポイント
– パスワードリセット機能はUserモデルを拡張して使用するため、MVCのうち新たに作成するのはViewとControllerのみで良い
– 処理のコントローラーのアクションがいろいろ登場するので、流れを整理しないと混乱する

“`
sessions/new.html.erb
→password_resets_controller#new
→password_resets/new.html.erb
→password_resets_controller#create
→メール送信

元記事を表示

【Rails】Action Mailer

#Action Mailer
Action MailerとはRuby on Railsに標準で組み込まれているメール送信機能です。
Railsからメールが送信されるようになります。

#実装
##Inquiryモデル作成
Action Mailerを実装するために、ユーザーの問い合わせ内容を保存するモデルを作成します。

“`
$ bin/rails g model inquiry name:string message:string
~~ 省略 ~~
$ rails db:migrate
“`
Inquiryモデルは氏名(name)、メッセージ(message)の属性を持ちます。

##ApplicationMailerを継承するクラスを作成
ApplicationMailerを継承するクラスは`bin/rails generate mailer 任意のメイラー名`で作成できます。

“`
$ bin/rails generate mailer inquiry
“`

“`app/mailers/inquiry_mailer.rb
class InquiryMailer <

元記事を表示

railsのサーバーの強制終了

#railsのサーバーの強制終了について

railsを使って自宅で開発しているときに、

“`
$ bin/rails s
“`

を使ってローカルホストのサーバを立てる。

そのとき、間違って
サーバーを起動した状態のターミナルのタブを消してしまって、ctrl + c
での終了ができなくなってしまい、困ったという経験がある。

その時の対処法、すなわち強制終了の方法をメモしておく。

## kill コマンドを使って強制終了

実際に実験してみると、
まず、

“`
$ bin/rails s
“`

を打ってローカルのサーバを立ち上げる。

その後確認してほしいのは

`プロジェクト名/tmp/pids/server.pid`

のファイル。

実際に見てみると、

“`project/tmp/pids/server.pid
1 1159   #ここに何らかの数字が入っているはず
2
“`

これはサーバーを立ち上げたときに生成される数字で、サーバーを終了させたときに自動で消去される。

この数字を使って、

“`
$ kill 1159
“`
とコマンド

元記事を表示

Rails5 CSV import 一括ユーザー登録

#Rails5でCSV読み込んで一括ユーザー登録機能作成

CSVの読み込みでちょっとつまずいたのでメモ。
ほんとーに初歩的なミスでした。
基本的にコチラを参考にさせてもらいました。
https://qiita.com/seitarooodayo/items/c9d6955a12ca0b1fd1d4

さて出てきたエラーはコチラ
`ActiveRecord::RecordInvalid (Validation failed: Name can’t be blank, Password can’t be blank, Password can’t be blank, Password is too short (minimum is 6 characters)):`

よくあるバリデーションに引っかかったやつですね。
blankってことはnilになっちゃってると言うことか。
と言うことはcsvファイルが読み込まれてないのか?

`Parameters: {“utf8″=>”✓”, “authenticity_token”=>”lzZScpvbb+vbmrJaxYMW3SweQrA0ISM

元記事を表示

【Rails】小数点以下の不要な0を削除する number_with_precision

小数点の表示で0の場合だけなくすという仕様で困ったことはありませんか?
具体的には以下のような仕様です。

1.000 => 1
1.100 => 1.1
1.110 => 1.11

## 解決方法

ActionView::Helpers::NumberHelperクラスのnumber_with_precision(optionの strip_insignificant_zeros: true)を使います。

`number_with_precision([数値],precision: [有効にしたい小数点桁数], strip_insignificant_zeros: true)`

precisionを省略した場合、デフォルトは3です。

## コードで仕様説明
スクリーンショット 2020-03-20 8.37.10.pngExcon::Error::Socket: getaddrinfo: Name or service not known (SocketError)というエラー文の対応

## 環境
$ ruby -v
ruby 2.6.5
$ rails -v
Rails 5.2.4

Amazon Linux 2

## 状況
本番環境としてデプロイした後に、画像をCarriorwave,fogを通じてS3にアップロードしようとすると、エラーが発生。
エラー文は以下の2種類。

“`
Excon::Error::Socket: getaddrinfo: Name or service not known (SocketError)
“`

“`
SocketError: getaddrinfo: Name or service not known
“`

## 本件の原因

“`ruby:config/initializer/carrior_wave.rb
if Rails.env.production?
CarrierWave.configure do |config|
config.fog_provider = ‘fog/aws’
config.fog_credentials = {
provider: ‘AWS’,

元記事を表示

OTHERカテゴリの最新記事