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

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

ミニQ & Aサービスの開発

Udemyの教材でミニQ&Aサービスの開発について学んだので、備忘録として記録します。
教材:[https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/)

## Rubyのバージョン管理

今回はバージョン2.5.1で進めました。

“`terminal:ターミナル
$ rvm -v #rvmのバージョンを調べる
$ rvm 1.29.8 (1.29.8) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]

$ rvm list
=* ruby-2.5.1 [ x86_64 ]
ruby-2.6.3 [ x86_64 ]

# => – current
# =* – current && default
# * – default

$ rvm install 2.5.1 #バージョン

元記事を表示

【解決策】formにカラムが設定されない!?

Webアプリを開発していて、routesとcontroller、viewを何度も見直したのにformを検証で見てみると何故かカラムが設定されない時に以下の方法で解決しました。

#before
= form_with model: @message, url: job_messages_path(@job), local: true do |f|
= f.text_field :text
#after
= form_with model: @message, url: job_messages_path(@job), local: true do |f|
= f.text_field :text, name: “message[text]”

下の行に、name:”テーブル名[カラム名]”を書き足せばカラムが設定され、値を入れることができました!!

元記事を表示

Active Storage + S3を使うときに気をつけること

__備忘録なので無視してください__

“file_field“で写真をアップする時に“direct_upload“を設定しないと“No route matches“になる時がある。

“`slim
= f.file_field :image, direct_upload: true
“`

元記事を表示

Rspecと Factoryの使い方

#Rspecとは?
**Rspec**とは自動テストをしてくれる言語。になります。
UIテストをいちいちせずとも、
「ページの遷移」、「モデルバリデーション」、「if分の条件分岐による処理の確認」…
などなど、人間がやるには面倒なことを自動でやってくれるのが**Rspec**になります!

#準備
今回は比較的簡単な、
「コントローラーによる画面遷移確認テスト」
のコードを書いていこうと思います

また、ログイン後の処理定義をするコードを書きますが、そのログイン処理を**Devise**を使ってやるものとします

##導入するGemインストール
今回使うのは**Rspec**と**Factory_bot**というGemを使います
内容については後ほど解説しますので、まずはインストールしましょう!!

“`ruby:Gemfile
group :development, :test do
gem “rspec-rails”
gem “factory_bot_rails”
end
“`

##rspecを設定・書くためのファイルを作成

“`
$ bundle exec

元記事を表示

Rails 真偽値を返すメソッド 一覧

##Railsで実行できる真偽判定メソッドをまとめました。

###any?
文字列や配列が空でない場合にtrueを返す。

“`
>> a = [“a”]
=> [“a”]
>> a.any?
=> true
“`

###empty?
文字列や配列が空の場合にtrueを返す。
nilに対してempty?メソッドを呼び出すと、NoMethodErrorが発生する。

“`
>> a = “”
=> “”
>> a.empty?
=> true
>> b = nil
=> nil
>> b.empty?
NoMethodError (undefined method `empty?’ for nil:NilClass)
“`

###nil?
nilの場合のみtrueを返す。それ以外はfalseを返す。

“`
>> a = nil
=> nil
>> a.nil?
=> true
“`

###blank?
empty?とnil?が合わさったメソッド。

“`
>> a = “”
=> “”
>> b = nil
=> nil
>> a.blank?
=> true
>

元記事を表示

Active Storageにも、1対1対応のモデルを作ったほうがいいかも

Rails 5.2から、Active Storageという、ファイルアップロードの機能が標準装備されましたが、そのまま使おうとしたところ、微妙に気になる点がありました。

## Active Storageの便利な点

今までPaperclipなどのサードパーティーのGemを使っていたのですが、以下のような点を自前で実装する必要がありました。

* S3でprivate保管していると、画像表示用に生成したpresigned URLが期限切れするという問題があるので、いったんRailsを経由させてS3のURLにリダイレクトさせる必要がある
* オンデマンドに適切なサイズのサムネイルを生成するのが難しい

Active Storageであれば、こういった引っかかりやすい箇所も標準で備えていて、しかも「複数オリジンの並行運用」なんてことまでこなせてしまいます。

## 使い方について

Active Storageは専用のデータベーステーブルを持って、ポリモーフィック関連で別なモデルと結びつきますので、画像を入れたいモデル側でのマイグレーションは不要です。`has_one_attached

元記事を表示

【Rails】外部キー追加におけるreference型の使用、未使用の違い。外部キー制約によるエラーをコンソールで確認してみた。

#概要
アソシエーション設定時にテーブルへ外部キーを追加していく中で、
reference型を使用して外部キーを追加した場合と
integer型で外部キーを追加した場合について違いを確認していきます。

#外部キー追加時のreference型について

例えば、UserモデルとBlogモデルで
Blogモデルにuser_idを外部キーとして設定する場合、
モデル作成と同時に設定するなら、以下のように記述して外部キーを追加することができます。

**reference型を使用する場合**

“`ruby

$ rails g model Blog title:string content:text user:references
“`

マイグレーションファイルはこのようになります。

“`ruby
class CreateBlogs < ActiveRecord::Migration[5.2] def change create_table :blogs do |t| t.string :title t.text :cont

元記事を表示

【Ruby】mapメソッドのつかいかた(+別メソッドとの組み合わせの例など)

自己整理&備忘録です。

#mapメソッドとは
mapメソッドとは、**「配列の要素それぞれに対して一定の処理を行って、新しい配列をつくるメソッド」**とされる。

 
基本的な型

“`
配列.map { |変数| 実行させたい処理 }
“`

名称は異なるが`collectメソッド`もmapと同じ動きをする。

#つかいかた(例)

##1. 数式

“`ruby:sample_1.rb

x = [0, 100, 500]
y = x.map { |x| x * 2 }
p y

#=> [0, 200, 1000]
“`

##2.mapの要素にメソッドを与える(よく見る形)

基本の型

“`
オブジェクト名.map(&:メソッド名)
“`

“`rb

sports = [“BASEBALL”, “SOCCER”]
p sports.map(&:downcase)

#=> [“baseball”, “soccer”]
“`

#mapとmap!の違い
`map`  → 元の値に対して影響を与えない
`map!` → 元の値を書き換える

`

元記事を表示

Railsチュートリアル 第4章

##Railsコンソールの設定
Railsコンソールはirb(IRB:Interactive RuBy)を拡張して作られているため、Rubyの機能を全て使うことができる。

“`
$ nano ~/.irbrc
“`

下記の設定を書くと、irbのプロンプトが簡潔な表示に置き換わる。

“`
IRB.conf[:PROMPT_MODE] = :SIMPLE
IRB.conf[:AUTO_INDENT_MODE] = false
“`

##後続ifとunless
if:条件式が”真”のときに実行される

“`
puts “x is not empty” if !x.empty?
“`

unless:条件式が”偽”のときに実行される

“`
>> string = “foobar”
>> puts “The string ‘#{string}’ is nonempty.” unless string.empty?
The string ‘foobar’ is nonempty.
=> nil
“`

##メソッド
###mapメソッド
配列の要素の数だけブロック内の処理

元記事を表示

【rails】ユーザー 登録時にnameカラムに自動的に@を付ける方法

#はじめに
初学者がポートフォリオ作成でハマったことをメモします。
TiwtterのアカウントIDのように特定のカラムの最初に@を付ける方法です。ホートフォリオ作成時にユーザーの名前やアカウントIDの最初に@を付けたいという方は多いと思います。
初歩的な内容すぎて調べてもそのような記事がすぐ見つからなかったので残しておきます。

##結論
`before_save`をmodelに設定する。
##コードと説明
formから送られてきた値を保存する前に加工する。
before_saveは、paramsをDBに保存する直前に指定したプログラム(今回の例では、:change_account_name)を実施するコールバック関数です。
before_saveを設定すると、createとupdateのどちらも場合にも、適用されます。

コールバック処理について
http://www.techscore.com/blog/2012/12/25/rails%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%E3%81%BE%E

元記事を表示

【Ruby】ヒアドキュメントの初歩的なつかいかた

簡単に備忘録。

# 1. ヒアドキュメントとは
ヒアドキュメントは**「文字列をシェルスクリプトやプログラミングに埋め込むためのもの」**
`””`無しや改行&空白なども書いた通りに適用できる(長い文などに有効)。

#2. 使い方

通常

“`ruby

puts “りんご”
puts “バナナ”
puts “メロン”
puts “いちご”

#=>
りんご
バナナ
メロン
いちご
“`

ヒアドキュメントの場合

“`ruby

puts <<~EOS りんご バナナ メロン いちご EOS #=>
りんご
バナナ
メロン
いちご
“`

#参考
[【3分でわかる】Rubyでヒアドキュメント](https://www.sejuku.net/blog/14283)
[ヒアドキュメントとは・基本の使い方(ruby)](https://qiita.com/shukan0728/items/b830e97f563e63e46e91)

元記事を表示

therubyracer のエラー

# `bundle install`
次のエラーがでました?

“`console:エラー内容
Building native extensions. This could take a while…
ERROR: Error installing therubyracer:
ERROR: Failed to build gem native extension.
current directory: /Users/koichi/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/therubyracer-0.12.3/ext/v8
/Users/koichi/.rbenv/versions/2.3.4/bin/ruby -r ./siteconf20200120-28144-771md0.rb extconf.rb
checking for main() in -lpthread… yes
checking for main() in -lobjc… yes
checking for v8.h… no

元記事を表示

Railsチュートリアル 第3章

この章では、テスト駆動開発について学習。

#テスト
Railsのテストには、コントローラーテスト、モデルテスト、統合テストの3種類ある。
ここでは、コントローラーテストについてメモ。

テストの例を2つほど

“`
test “should get home” do
 get static_pages_home_url  ⇨GETリクエストをhomeアクションに対して発行
 assert_response :success   ⇨リクエストに対するレスポンスは”成功”になるはず
end
“`

“`
test “should get home” do
 get static_pages_home_url
 assert_response :success
 assert_select “title”, “Home | Ruby on Rails Tutorial Sample App” ⇨titleタグ内に「Home | Ruby on Rails Tutorial Sample App」と言う文字列があるはず
end
“`

###setupメソッド
書くテストが実行される

元記事を表示

【Railsでスクレイピング】Mechanize記事まとめ

### **これを見ればスクレイピングできないサイトはない(技術的に)**

[Rails スクレイピング手法 Mechanizeの使い方 – Qiita](https://qiita.com/shizuma/items/d04facaa732f606f00ff)

[【rails】webサイトからスクレイピングしたデータをデータベースに保存する方法 – Qiita](https://qiita.com/tsubasaweb1/items/5be78cefed67020ac483)

[スクレイピングでサイト情報を取得し、データベースにストアするまでの流れをまとめてみた[Rails] – Qiita](https://qiita.com/takuyanin/items/01256773e1cbfc84f51a)

[Mechanizeでサイトログインしてスクレイピングするときのアレコレ メモ – Qiita](https://qiita.com/meguroman/items/6d2520ec83ffa4dfc0c7)

[MechanizeとNokogiriでリンク先のペー

元記事を表示

【Rails】 Heroku, Aws で詰まったときに見る記事まとめ

## Heroku

#### db

[heroku上のDBをリセットする](https://qiita.com/G-awa/items/792b7cd60205823f7ac0)

“`
heroku pg:reset DATABASE_URL
heroku run rake db:migrate
or
heroku run rake db:seed
“`

[【Rails】Heroku上でApplication Error(H10 App crashed)【PostgreSQL】](https://qiita.com/totto357/items/1a6b88db8d2775540e1b)

“`
group :production do
gem ‘pg’, ‘0.20.0’
end
“`

###### メモ
“`heroku run rails c“`でheroku上のdbの中身を確認できる。
“`heroku run rails db:migrate:status“`でdbの状態を見れる。
“`heroku logs -t“`で詳しいエラー内容を見れ

元記事を表示

あっさり読むrails④(非同期処理)

#はじめに
JSを使った非同期処理を簡単に書いてみます。
#前提
使用するのは、
`Ruby on rails`
`Haml`
`jQuery`
です。
CSSは特に指定しません。
#実行
次のファイルを用意します。

“`ruby:Gemfile
gem ‘jquery-rails’
“`
これを記述して、`bundle install`します。
(ディレクトリが、アプリのディレクトリになっている事を確認。`pwd`というコマンドで確認可能)

“`ruby:application.js
//= require jquery
“`
この記述を忘れるとエラーになります(`$とは何ですか?`という感じのエラー)

“`haml:sample.haml.html
= form_with model:@sample, local: true do |f|
= f.text_area :name, placeholder: “サンプル”, class: “sample-form”

.add-text
“`
これがビューデータとなります。

“`javascript:samp

元記事を表示

各レコードの計算結果の合計を出す

配列を覚えると大変便利なことに気付いた。

1つの注文に対して複数の注文商品が登録されており、1つの注文の合計金額をorders/show画面に出したい。
使用するメソッドは今回.injectを使う。
関係は以下とする。

“`:app/assets/models/order.rb
class Order < ApplicationRecord has_many :order_products, dependent: :destroy end ``` ```:app/assets/models/order.rb class OrderProduct < ApplicationRecord belongs_to :order end ``` OrderProductモデルにあるのは以下のカラム ・product_name(商品名) ・quantity(数量) ・price(単価) ```:orders_controller.rb def show @order = Order.find(params[:id]) @total = [] #配列の初期化 @order.ord

元記事を表示

複数のレコードを一括処理

一括でレコードをアレコレするやり方。なお割と力技。
それぞれやりたい事は以下。

①カートを空にする =Userに紐づくCartレコードを全削除
②カートに入ってる商品を注文する =複数のCartレコードを使って複数のOrderProductレコードを作成する。
③注文情報と注文商品情報をまとめて変更する =親要素と子要素を一括でupdateをかける

前提ーー
Cartモデル、OrderProductモデルには以下のカラムがある
・product_name
・quantity
・price
・order_id(OrderProductのみ)
・status(OrderProductのみ)
Orderモデル
・user_id
・status

User

元記事を表示

【Rails】scope、ActiveSupport::Concernについて

# 環境
`Rails 5.2.3`
`mysql 5.7.28`

# リテラルについて

**例文**

“`ruby:contoroller.rb
def index
@boards = Board.includes(:user).order(‘created_at DESC’)
end

def bookmarks
@bookmarks = current_user.bookmarks.board.includes(:user).order(‘created_at DESC’)
end
“`

改善ポイント
・orderはリテラルではなくscopeで定義すべき

理由
・共通化できるクエリはscopeでメソッドのように定義すべき
・クエリはできるだけリテラルで使わないほうが良い
リテラル=変数やメソッド化していないただのベタ書きした文字や数字

メリット
・任意のメソッド名でどのような効果を持つかわかりやすくなる
・探す場所が1箇所に絞られ、リファクタリング容易(保守性)、データベースパフォーマンスの最適化(読み込みスピードUP)が図れる
・IDEの構文チェックが

元記事を表示

rakeタスクに引数を渡したいとき

rakeタスクで引数を渡したい!
意外とまとまった記事がなかったので備忘。

## タスク名とともに引数を書く
“`ruby
task :task_name, [‘filter’] => :environment do |_task, args|
p args
p args[:filter]
~
“`
`filter` の部分は任意の文字でOK

## タスク実行方法
command: `rake “task_name[arg]”`

`arg` 部分に渡したい引数を書く。この場合だと “arg” が渡される。
タスク全体を “” で囲まないと、引数までタスクとして認識されない。

## 実行結果
“`
=> #
“arg”
“`

元記事を表示

OTHERカテゴリの最新記事