Ruby関連のことを調べてみた2020年11月22日

Ruby関連のことを調べてみた2020年11月22日
目次

【エラー】Postgres PG::ConnectionBad: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket “/tmp/.s.PGSQL.5432”?【Rails】

“`brew install imagemagick“`した後にサーバーを立ち上げると下記のエラーが。![スクリーンショット 2020-11-22 午前8.59.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692366/8a1c735d-a751-773a-44d6-3be72532e0cb.png)

#したこと
とりあえずhttps://qiita.com/great084/items/98c83364f246473249c4 を参照。
しかしエラーは解決せず。

“`
postgres -D /usr/local/var/postgres 
2020-11-21 23:37:47.476 AEDT [84006] FATAL: database files are incompatible with server
2020-11-21 23:37:47.476 AEDT [84006] DETAIL: The data directory was initialized by

元記事を表示

Rails で既存カラムにdefault オプションを追加したい

# はじめに

Rails で既存カラムのdefault オプションを追加したい場面があったので備忘録です。

# 環境

* macOS 10.15.6
* Ruby 2.5.7
* Rails 5.2.3

# 参考URL



# 目標

* 既存カラムにdefault オプションのみ変更したい
* きちんとロールバックできるmigration ファイルを作成したい

# ロールバック用のメソッドについて

* `up/down` メソッド
* `change` メソッド

上記の2つのパターンでmigration ファイルを記述できますが、オプションの変更のみであれば`change` メソッドの方がシンプルでロールバックも可能ということな

元記事を表示

【Rails】でデータを保存・更新後に直前のページに戻りたい!

# はじめに
たとえばECサイトの購入ページからユーザー情報を更新した後、トップページに飛ばされたらどうでしょう?
ユーザーはまた購入画面にアクセスし直さなければならず、かなりUXが悪い状態になってしまいます。


そこで、元の購入ページへ戻す方法を調べてみました。

# 直接指定すれば良いのでは?
もちろんページ同士が1対1の関係にある場合はこれでOKです。

しかし、ユーザー情報の更新などは他のページからも行えるようにしたいですよね。
ページの関係が多対1の場合、リ

元記事を表示

Rubyの第2歩(変数とmethod編)

\![Mac OS X-10.15.7]() \![ruby-2.6.1p33]()

# はじめに

本記事ではマルチスケールシミュレーション第6回授業Rubyの変数とmethodについて扱います。

# 目次

1. [前回の振り返り](#前回の振り返り)

2. [授業内容](#rubyの変数とmethod)

1. [Rubyの変数](#変数)

2. [Rubyのmethod](#method)

3. [まとめ](#まとめ)

4. [参考資料](#参考)

# 前回の振り返り

[前回の記事(Rubyの入出力編)](https://qiita.com/Rooter-edi/private/e6251a9fa97be34bc69f)では、Rubyにおける入出力の方法について書きました。

**入力:puts,

元記事を表示

Rubyの第1歩(入出力編)

\![Mac OS X-10.15.7]() \![ruby-2.6.1p33]()

# はじめに

本記事ではマルチスケールシミュレーション第5回授業Rubyの入出力について扱います。

# 目次

1. [Rubyとは](#そもそもrubyとは)

2. [授業内容](#rubyの入出力)

1. [Rubyの出力](#様々な出力方法)

2. [Rubyの入力](#様々な入力方法)

3. [出力先指定](#出力先の指定)

3. [まとめ](#まとめ)

4. [参考資料](#参考)

# そもそもRubyとは

Rubyを実際に触れる前に、Rubyという言語がどういった経緯で生まれ、どんな特徴を持った言語なのかを調べてみた(Wikipedia)。

> **Ruby誕生の経緯**
>
> R

元記事を表示

「Ruby on Rails」データベースに修正を加える方法

#はじめに

Railsで学んだことをアウトプットします。
初投稿で、Markdown記法すらわからず、いろいろ調べながら書いてみました!
お手柔らかにお願いします。

#カラムに後からオプションを加える流れ

これは、データベースの設計にミスったので、
新しくマイグレーションファイルを作って、上書きしたところです。

“`ruby:追加したマイグレーションファイル
class ChangeColumnToOrderDetail < ActiveRecord::Migration[5.2] def up change_column :order_details, :making_status, :integer, default: 0 end def down change_column :order_details, :making_status, :integer end end ``` もともとのテーブル名はorder_details,カラム名はmaking_status,データ型はintegerとなっています。 下のdownで定義され

元記事を表示

railsのメソッド”save”がどう定義されているのか読解してみた

rails読解シリーズ第5回目はsaveメソッド。

“`ruby:save
# File activerecord/lib/active_record/base.rb, line 2575
def save
create_or_update
end
“`
create_or_updateメソッドが呼ばれているだけのようです。

“`ruby:create_or_update
# File activerecord/lib/active_record/base.rb, line 2916
def create_or_update
raise ReadOnlyRecord if readonly?
result = new_record? ? create : update
result != false
end
“`

2行目で、対象のインスタンスが読み取り専用かどうか確認するようです。
メソッドの名前からして、readonly属性はboolean型で定義して、readonly: trueとすることで、利用することができそうです。
プログラマーが自ら定義するこ

元記事を表示

【基礎】RubyのREPLとは【Cloud9】

RubyのREPLとは

REPL = Read eval print loop
を略したもので、対話型のRuby実行環境。

Rubyのメソッドを試したりできる。

ターミナルで[$ irb]を実行すると開始。

puts “hello”
hello
=>nil

[exit]で終了できる。

元記事を表示

Railsチュートリアルエラー :FormatError: fixture key is not a hash

#エラーの発生!

Ruby on Rails チュートリアル 第6番
“リスト 8.24: 有効な情報を使ってユーザーログインをテストする”
を進めていると。。。。

今まで通っていたテストが全てエラーに!!

“`
21 tests, 0 assertions, 0 failures, 21 errors, 0 skips
“`

しかし、よくよくエラーを確認すると…

“`
ActiveRecord::Fixture::FormatError: fixture key is not a hash:
/home/ubuntu/environment/sample_app/test/fixtures/users.yml
“`
fixturesフォルダの中のusers.ymlに原因があると判明。

調べてみると、ymlではインデントも意味をもつとのこと。

【参考】
https://teratail.com/questions/263996

/home/ubuntu/environment/sample_app/test/fixtures/users.ymlを
下記のよ

元記事を表示

railsのgem deviseのログインページを開くコントローラを読解してみた

rails読解シリーズ、第4回はdeviseのコントローラを読解してみました。
いつも深入りしすぎて、全体像が見えづらくなっているので今回はあっさりめに読んでみました。

ログインページを開くための、session#newアクションを見ていきます

“`ruby:session#new
def new
self.resource = resource_class.new(sign_in_params)
clean_up_passwords(resource)
yield resource if block_given?
respond_with(resource, serialize_options(resource))
end
“`

“`ruby:2行目
self.resource = resource_class.new(sign_in_params)
“`
resource_classによってdeviseを適用しているモデル、例えばUserモデルが呼ばれます。
sign_in_paramsによりストロングパラメータを通した値が、Userモデルに格納されま

元記事を表示

railsで”Model.new”が呼ばれるとどうなるか読解してみた

railsメソッドがどのように定義されているのか学んでいく企画第3弾はモデルからオブジェクトを生成する[newメソッド(Rails APIリンク)](https://api.rubyonrails.org/v5.1.7/classes/ActiveModel/Model.html#method-c-new)です。

実際にはnewメソッドはRubyで定義されています。
ので、正確にはタイトルの通り、railsのActiveModelによって定義されるモデルのインスタンスをrubyで定義されているnewメソッドが呼び出して生成したときに何が起こるか、について見ていきます。

“`ruby:new
class Person
include ActiveModel::Model
attr_accessor :name, :age
end

person = Person.new(name: ‘bob’, age: ’18’)
person.name # => “bob”
person.age # => “18”
“`

#newメソッドが呼ばれたら?
newメソッドによりインス

元記事を表示

Rubyでロックファイルによる簡易的排他制御

冪等性がないやアクセス制限などの理由で、同時実行不可という要望はしばしば出てきます。普段ではデータベースに実行フラグを置いたり、RedisやQueueで制御したりするのが一般的ですが、どれも実装コストが高くて、小規模プロジェクトにはコスパがやや高いと思います。
ロックファイルで制御を行えば、データベースの変更などが不要で、手軽いに排他制御ができます。

# TD;LR

“`rb
require ‘fileutils’
DIR_NAME = ‘tmp/locks’

# 排他制御用ラッパー
def synchronized(key = :default_lock)
# フォルダーがない時エラーが生じるので、あらかじめ生成しておく
FileUtils.mkdir_p(DIR_NAME)
lock_file_path = “#{DIR_NAME}/#{key}”
File.open(lock_file_path, ‘w’) do |lock_file|
# 排他ロック
if lock_file.flock(File::LOCK_EX|File::LOCK_

元記事を表示

【Rails・devise】複数モデルを管理する際の<>

#はじめに
deviseを用いて一般の方とグループ(企業や団体等)で分けてログインを実装する上で、
ログインした人のみが閲覧できるbefore_actionの実装に手間取ってしまったので記録します!

#結果から
applicationコントローラーで
・グループの方がログインした場合 → authenticate_any!が有効
・それ以外の人がログインした場合 → authenticate_user!が有効

“`ruby:application_controller.rb
class ApplicationController < ActionController::Base def authenticate_any! if group_signed_in? true else authenticate_user! end end end ``` 各コントローラーで必要なところで`before_action :authenticate_any!`を記載する application_controller.rbに記載

元記事を表示

「もっと見る」でページネーションを非同期(Ajax)で実装する

# はじめに

## やりたいこと

「もっと見る」を押すことで次の記事が出るようにしたい

## やってみて

JavaScriptが苦手な僕でも、簡単に実装することができました。
今回はjQueryで実装しています。

### 実装画面

![画面収録 2020-11-21 15.56.42.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771826/ff8f2862-7edb-8cde-8306-d98b52557134.gif)

### 実装例
[Output App](https://outputapp.herokuapp.com)

## 参考
[kaminari徹底入門](https://qiita.com/nysalor/items/77b9d6bc5baa41ea01f3)
[t-taira blog > ailsで「もっと見る」の実装]( http://t-taira.hatenablog.com/entry/2013/04/05/093714)

***※情報のソースが古

元記事を表示

Railsを使ったToDoリストの作成(8.ログイン機能の実装)

#概要
本記事は、初学者がRailsを使ってToDoリストを作成する過程を記したものです。
私と同じく初学者の方で、Railsのアウトプット段階でつまづいている方に向けて基礎の基礎を押さえた解説をしております。
抜け漏れや説明不足など多々あるとは思いますが、読んでくださった方にとって少しでも役に立つ記事であれば幸いです。

#環境
* `Homebrew: 2.5.10` -> MacOSのパッケージ管理ツール
* `ruby: 2.6.5p114` -> Ruby
* `Rails: 6.0.3.4` -> Rails
* `node: 14.3.0` -> Node.js
* `yarn: 1.22.10` -> JSのパッケージ管理ツール
* `Bundler: 2.1.4` -> gemのバージョン管理ツール

“`:iTerm
$ brew -v => Homebrew 2.5.10
$ ruby -v => ruby 2.6.5p114
$ rails -v => Rails 6.0.3.4
$ npm version => node: ‘14.3.0’
$ yarn –

元記事を表示

hidden_field と hidden_field_tag 備忘録

“`ruby:
<%= form_with(model: @comment, local: true) do |f| %>
<%= f.hidden_field :post_id, value: @post.id %>
<%= f.text_field :content %>
<% end %>
“`

“`ruby:controller
# 受け取り方
class CommentsController < ApplicationController def create @comment = Comment.new(comment_params) @comment.user_id = current_user.id if @comment.save redirect_back(fallback_location: root_path) else @post = Post.find(params[:post_id]) @comments = @post.comments render 'p

元記事を表示

Ruby基礎 ①出力・変数・変数展開・if文(条件分岐)

#Rubyとは
RubyはWEBアプリケーションの「システム」をつくるためのプログラミング言語

#出力方法

“`Ruby
puts “Hallo World!”
# Hallo World!
“`
文字列にはクォーテーション( ‘ もしくは ” )で囲むこと

“`Ruby
puts 10
# 10

puts 10+20
# 30

puts “10” + “20”
# 1020
“`
数値をクォーテーションで囲むと連結してしまう

“`Ruby
+ # 足し算
– # 引き算
/ # 割り算
% # 割り算の余り
“`

#変数
変数とは変数とは、値を入れておく箱のようなもの

“`Ruby
name = “Mike”
puts name
# Mike
“`

変数を使うのは、必ず変数を定義(変数名 = 値)した後でなければ使えない
puts “name”にした場合、nameと出力されるので注意

“`Ruby
name = “Mike”
puts name + “です”
# Mikeです
“`

・変数の更新

“`Ruby
name =

元記事を表示

【自分メモ】フレームワークについて

制作したいものに対して、これを使えば作りやすくなりますよ、的なものがフレームワーク。

Webアプリケーションを制作する時は、RubyonRailsというフレームワークを使います。
RubyonRailsにはWebアプリケーションを制作するための様々な機能がモリモリ入っているので、RubyonRails(の書き方)に従ってコードを書けば、自分で一から作成するよりも遥か簡単にWebアプリケーションを制作することができます。

※自分の考えをメモとして残していますので、間違っていたり修正した方が良い点がございましたら、ドシドシつっこみいただけると嬉しいです!

元記事を表示

ActiveSupport::Concernでクラスメソッドを定義して、さらにクラスメソッドを呼び出せるのか

こちらの記事を参照して、

https://qiita.com/h-shima/items/d772b4cbe7368ddb8255

modelにインクルードすることによりConcernでクラスメソッドを定義できることがわかったのですが、そのクラスメソッド内でさらに**モデルに定義したクラスメソッドが呼び出せるか**検証しました。

####concern内でクラスメソッドを呼び出す
“`ruby:app/models/concerns/hogehoge.rb
module Hogehoge
extend ActiveSupport::Concern

module ClassMethods
def my_class_method
puts(“実行結果”)
self.model_class_method(“model_class_method”)
puts(“my_class_method”)
end
end

end
“`

####モデルを定義
“`ruby:app/models/concerns/mode

元記事を表示

letとlet!の使い分け(Ruby/Rspec)

letとlet!の使い方ではまったので備忘録として残します。

letとは

letはインスタンス変数やローカル変数をletという機能で置き換えることができます。

ex)
@user = user.create
let(:user) { create(:user) }

letを使うと何が嬉しいかというと、テストコードがすっきりするというのと
letはその変数が必要になるまでは呼び出されないという遅延評価されるという特徴があるため、効率のよいテストコードを作成できることです。
beforeを使うとブロックの宣言時に全ての変数が評価されるため、
使用していない変数があったとしても評価されてしまい
あまり効率のよくないテストコードになってしまうことがあります。

let!は基本的にはbeforeと同じ意味になります。
つまりテストを実行する上で前提条件にあたる部分はletではなくlet!で記載してあげる必要があります。

ex)
before do
@user = user.create
end
let!(: