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

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

Model#xxx_before_type_cast / Get instance / Not type casted inputs ( attributes ) / e.g invalid Date to be nil / #Rails

“`rb

# == Schema Information
#
# Table name: users
#
# id :bigint not null, primary key
# birth_date :date not null

class User < ApplicationRecord end # Valid Date # type casted # be Date User.new(birth_date: "19800229").birth_date # => Fri, 29 Feb 1980

# valid Date
# before Type Casted
# be String
User.new(birth_date: “19800229”).birth_date_before_type_cast
# => “19800229”

# Invalid Date
# type casted
# be nil
User.new(birth_da

元記事を表示

xxx_before_type_cast / #Rails で 不正な日付を ActiveRecord に渡すと nil に変換されてしまうため 、タイプキャストする前の入力値を得る

“`rb

# == Schema Information
#
# Table name: users
#
# id :bigint not null, primary key
# birth_date :date not null

class User < ApplicationRecord end # Valid Date # type casted # be Date User.new(birth_date: "19800229").birth_date # => Fri, 29 Feb 1980

# valid Date
# before Type Casted
# be String
User.new(birth_date: “19800229”).birth_date_before_type_cast
# => “19800229”

# Invalid Date
# type casted
# be nil
User.new(birth_da

元記事を表示

【Rails不定期連載】#1 DockerでRailsの環境構築

アウトプットの練習 & 初心に帰って基礎からRailsを見直してこうと思います。
不定期に更新します。

今回はRuby on Railsの環境構築。

今回はDockerでRailsチュートリアルを進めていくためのRailsプロジェクトを作ります。
[rbenv]([https://github.com/rbenv/rbenv](https://github.com/rbenv/rbenv))などを用いたローカルでの環境構築ではないです。

## 前置き

### 前提として…
– 以下の場合はローカルでの環境構築を勧めます
– railsの環境構築1度もしたことない
– dockerを使った開発をしたことがない(Dockerfileの記述がわからない)
### アプリケーション要件
– ruby 2.6.5
– rails 6.2.0
– sqlite3
– webpacker、springはとりあえず不要なので除く

すごいざっくりですが、こんなイメージ、コンテナを作るのがゴールです。

## レッツ環境構築

### STEP1 rails newコマ

元記事を表示

1つの投稿で複数の画像をプレビュー表示させながら保存する

##概要

Railsアプリケーションにて、投稿に紐付く画像を複数枚、プレビュー表示させながら投稿できる機能を実装したので備忘録としてまとめます。

ProductにImageが紐付きます。

ビューのところは特にもっといい方法があるんだろうなと思っておりますが、
改善点や間違いがあれば是非コメントいただけますと幸いです!

##完成イメージ
スクリーンショット 2020-03-05 9.21.22.png

##マイグレーション

マイグレーションは通常通り・・・

“` .rb
class CreateProducts < ActiveRecord::Migration[5.2] def change create_table :products do |t| t.string :n

元記事を表示

rails sができない時の対処方

# rails sを叩くとエラー出力

spring stopを試して解決できず少し詰まったので備忘録として残します。

“`
/Users/arakitakuro/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:90: warning: already initialized constant FileUtils::VERSION
/Users/arakitakuro/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.4.1/lib/fileutils.rb:105: warning: previous definition of VERSION was here
/Users/arakitakuro/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1188: warning: already initialized constant FileUtils::Entry_::S_IF_DOOR
/Users/ara

元記事を表示

ログインshellの変更、そしてrbenvでインストールしたRubyをデフォルトにする方法

ゴールはrbenvでインストールしたRubyをデフォルトで開けること。
→その設定が書かれた.bash_profileというファイルを
 デフォルトで読み込んでもらえないというのが問題でした。

前回記事
https://qiita.com/hacchi_mom/items/2095e6ac7aecd03f131a

# .bash_profileについて

まず.bash_profileってなんなんだというところから調べると
【ログインの際に読み込まれる設定ファイル】とのこと。

そして重要なのは、その設定ファイルは
【ログインshellがbashのときに読み込まれるもの】
ということ!!!!

# ログインshell問題

ログインshellとはログイン時に起動するshellのことですが
そもそも私の起動時のログインshellはbashではなくzshだったのです。

Terminal起動時に毎回まず`bash`と一度打ってから
全ての作業を始めておりました…そういうもんだと思っていました。笑

初歩すぎること書いててすいません。。。
だから.bash_profileを読み込んでもら

元記事を表示

[ruby,rails]gemのバージョンのdefault設定解除方法

#1.エラーの例

“`
$gem uninstall railties -v ‘6.0.2.1’ #アンインストールコマンドです
~中略~
gem “railties” cannot be uninstalled because it is a default gem #エラー文
“`

railsやその周辺のgemをダウングレードするべく、最新のgemに対し上記のアンインストールコマンドを打ったところその下のようにエラー文をだしました。そのエラー解決についてあまりネット上に記載がなかったので、解決方法を記載します
※railsなどのgemのバージョンを下げるには”インストールされている最新のgemのバージョン=反映させたいgemバージョン”とするため、必要なバージョン以上の全てのバージョンをアンインストールする必要があります

#2.エラーの原因
コマンドの意味をよく調べずに`gem update –default`というコマンドを打ったところ、local( /Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5

元記事を表示

超最低限のRailsアプリを丁寧に作る(もう一度きちんと復習して初心者を卒業しよう)

# この記事の基本的な方針
0からアプリケーションを立ち上げるとき、どういう手順で行うでしょうか?
考えれば考えるほどやりたいことややらなければならないことが溢れてくると思いますが、
「全てのアプリケーションに共通した超最低限のものをまず組む」、そして「必要に応じてどんどん拡張してゆく」が正しい手順です。
では全てのアプリケーションに共通した超最低限のものとはなんでしょうか?
それはログイン機能です。
ここでは、「新規登録画面」・「ログイン画面」・「インデックス画面」のたった3画面のアプリを作ります。インデックス画面は、ログイン状態であれば「自身のemailアドレス」と「ログアウトのリンク」が表示され、非ログイン状態であれば「ログインのリンク」が表示されます。
# 想定する読み手
既に一度Railsアプリをチュートリアルやスクール等で作ったことがある方を想定しております。
Mac使用で、パソコンの環境構築は完了していることが前提です。
# 具体的なコーディング手順
## ①アプリを立ち上げる
まずターミナルを開き`cd`コマンドを使い、アプリを立ち上げたい場所に移動します

元記事を表示

maxlengthオプション

##maxlengthオプション
text_fieldにつけることができるオプションです。ユーザー登録のニックネームなど入力できる最大文字数を指定することができます。

【例】

“`

<%= f.text_field :nickname, autofocus: true, maxlength: "8" %>

“`
上記の場合だと最大文字数が8文字までと指定できます。

元記事を表示

【プログラミング初心者】Rails6をダウングレードしたい

★実現したいこと

2020年3月現在、Macのローカル環境で【rails -v】を行うと
【rails ‘6.0.2.1’】がデフォルトとなっています。

アプリケーション作成の都合上、上記を【rails ‘5.2.1’】にダウングレードする必要がありました。

★試したがうまくいかなかったこと
①gem uninstall rails
②gem uninstall railties -v ‘6.0.2.1’

①→②の順番で行うも、rails -vするとまだ’6.0.2.1’のまま・・・

★解決策
sudo gem uninstall railties -v ‘6.0.2.1’ –force

上記コマンドを実行したところ、無事Rails6がアンインストールできました。
あとはこれまでと同様の方法で、Rails のバージョンを指定し、インストールするのみです。

元記事を表示

【プログラミング初心者】Macのローカル環境でRails5のサーバーが起動しないエラーを解消

★当方環境
MacBookAir
Visual Studio CodeとiTerm2を使用。

★課題
iTerm2上で【rails s】でサーバー起動しても、エラーが発生する。

★解決策
bundle exec pumactl start
を行うことでpumaが起動し、サーバーが立ち上がりました。

元記事を表示

【翻訳】RailsのフロントエンドはWebpack、Webpacker、Bundler、Asset Pipelineのどれを使えば良いの?

この記事は、Giles Bowkett氏の[“Should I Dish Up My Rails Front End With Webpack, Webpacker, Bundler, or the Asset Pipeline?”](https://gilesbowkett.com/posts/2019/05/06/webpacker.html)をご本人の承諾を得て翻訳したものです。
Railsのフロントエンドの実装に使えるツールは色々ありますが、違いがよく分からないと感じていたときに参考になった記事だったので訳しました。

以下より翻訳になります。

# RailsのフロントエンドはWebpack、Webpacker、Bundler、Asset Pipelineのどれを使えば良いの?

「Webpackが具体的に何をしているのかよくわからない」
というコメントをどこかで見たことがあります。
これは多くのRailsエンジニアが疑問に思っていることですが、実は難しい話ではないのでここで整理しましょう。

## 要点まとめ

– Bundlerを使ってJavaScriptやCSS関連の

元記事を表示

accepts_nested_attributes_forとfields_forを使ってデータを保存で苦戦した(has_one とbelongs_to 使用)

環境 rails 5.2.3 ,ruby 2.5.1

# 問題点
taskの内容は保存されるのにdaytimeのデータは全く保存されない!
## model task
class Task < ApplicationRecord has_one :daytime accepts_nested_attributes_for :daytime end ## model daytime class Daytime < ApplicationRecord belongs_to :task ,optional: true end # 改善点 tasks_controller.rb - before def new @task = Task.new @task.daytimes.new end - after def new @task = Task.new @task.build_daytime end @task.daytimes.newだと undefined method `new' for nil:NilClassとエラーが出ていたので @ta

元記事を表示

[Rails5]カラムを暗号化しつつ、検索したい

DBに保存する値を暗号化しつつ
検索(完全一致)もする実装をしたので、その時のメモです。

### 動作環境
rails 5.2.2.1

### 概要
Humanモデルのencrypted_nameカラムを暗号化します。
AttributeEncryptモジュール作成、Modelでincludeすることで
暗号化したいカラムを定義できます。

“`ruby:migrateion_file
class CreateHumen < ActiveRecord::Migration[5.2] def change create_table :humen do |t| t.string :encrypted_name end end end ``` ```ruby:app/model/human.rb class Human < ApplicationRecord include AttributeEncrypt encrypt_attribute_accessor :encrypted_name end ``` encrypt_attrib

元記事を表示

【Rails】gem ‘devise’ 実装する手順

## Qiita投稿の背景
Railsに認証機能を実装する時にgemのdeviseを使用しています。
しかし、devise特有のコマンド等を都度ググることになっているため、自分の備忘録も兼ねて記録します。

## この記事の対象者
– Railsでgemのdeviseを使って、簡単な認証機能を実装したい方
– deviseを初めて実装する方

## 環境
– ruby 2.5.1
– Rails 5.2.4.1

## deviseをgemでインストール
まずは、以下のようにGemfileに記述します。

“`:Gemfile
gem ‘devise’
“`

次にターミナルで、bundle installをして、deviseをインストールします。

“`
$ bundle install
“`

## deviseの初期設定
deviseのインストールが終わったら、初期設定をします。
ターミナルで下記コマンドを入力してください。

“`
$ rails g devise:install
“`
すると、、、

“`
Running via Spring preloade

元記事を表示

【RSpec】言語非依存の壊れにくいバリデーションテストを作る

# はじめに
RSpecでバリデーションのテストを書くとき、下記のように書くことが多いと思います。

“`spec/models/user_spec.rb
it “is invalid without a name” do
user = User.new(name: nil)
user.valid?
expect(user.errors[:name]).to include(“can’t be blank”)
end
“`

かの[EverydayRails](https://leanpub.com/everydayrailsrspec-jp/read#leanpub-auto-section-18)にも同様のサンプルが掲載されています。

しかし、I18nを導入してエラーメッセージなどを日本語化したときにこのテストは通過しなくなってしまいます。
そこで、次の様に修正します。

“`spec/models/user_spec.rb
it “is invalid without a name” do
user = User.new(nam

元記事を表示

Hamlでbuttonタグにclassを指定する方法

Hamlでbuttonタグにclassを指定するのに苦労したので、メモ程度に残しておきます。

“`HAML
%button{class: “HamlBtn”, type: “submit”}ボタン
“`

このようにするとhamlでもbuttonタグにclass名を指定することができます。

元記事を表示

【RuboCop】複数行の引数の最後の値にカンマを付けたい

# 複数行の配列や引数を書くとき
### 最後にカンマを付けない派
“`seeds.rb
User.create!(
name: ‘foo bar’,
email: ‘foo@baa.com’,
password: ‘password’,
password_confirmation: ‘password’
)
“`
`rubocop -a`で自動整形すると、デフォルトでは上記のように整形されます。
ruby以外の言語だと、引数や配列の最後にはカンマを付けるとエラーになったりするので、一般的に使われている書き方だと思います。
### 最後にカンマを付ける派
“`seeds.rb
User.create!(
name: ‘foo bar’,
email: ‘foo@baa.com’,
password: ‘password’,
password_confirmation: ‘password’,
)
“`
分かりづらいですが、先程の例と比べると、最後の引数の後にカンマが付いているのが分かります。
rubyでは上記のように最後の引数にカンマを付けても問

元記事を表示

【Rails】bundle install したときに vender/bundle にインストールされるのをデフォルトに戻す

# はじめに
Railsで開発している時、エラーを解決しようとガチャガチャやった後、`bundle install`したらなぜかプロジェクト下の vender/bundle に gem がインストールされるようになってしまいました。とりあえず前の状態に戻したいと思い、原因と解決法を探りました。

# bundle install –path vender/bundle
調べてみると、むしろ`bundle install –path vender/bundle`を推奨する記事が散見されましたが、下記の記事のようにこの慣習に疑問を呈している記事もありました。

[bundle install時に–path vendor/bundleを付ける必要性は本当にあるのか、もう一度よく考えてみよう](https://qiita.com/jnchito/items/99b1dbea1767a5095d85)

# デフォルトに戻す
ググると以下のような方法をすぐに見つけました。

> Bundlerがどこからgemを探すかは、プロジェクトルートの下の.bundle/configに設定ファイルがあ

元記事を表示

controller.rbでのコードをまとめかた

##コードをまとめかた
controller.rbの記述が繰り返し書かれているときは、before_actionを使用して、メソッドとしてまとめます。
【例】モデル名がPostのとき

“`app/controllers/posts_controller.rb
class TweetsController < ApplicationController def index @posts = Post.all end 〜略〜 def show @post = Post.find(params[:id]) end def edit @post = post.find(params[:id]) end def update post = Post.find(params[:id]) post.update(post_params) end 〜略〜 end ``` 上記の記述だとshowとeditの中身が一緒なので、before_actionを使用します。 ##before_action コントローラのすべてのア

元記事を表示

OTHERカテゴリの最新記事