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

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

Active AdminでEnumsを用いた属性に基づいたチェックボックフィルタを作る

– Rails 6.0.1
– Active Admin 2.4.0

を使います。

# 結論

Active Adminで、Active RecordのEnums (`ActiveRecord::Enum`) を用いたモデルの属性のフィルタをチェックボックス形式で作りたいときは、Enumsのkey-valueマッピングのHashを渡します。

“`ruby
# app/models/user.rb
class User
enum status: { active: 0, suspended: 1, inactive: 2 }
end

# app/admin/user.rb
ActiveAdmin.register User do
filter :status, as: :check_boxes, collection: User.statuses
# User.statuses #=> { active: 0, suspended: 1, inactive: 2 }
end
“`

|`active` / `suspended` で検索している|
|:–|
|<

元記事を表示

ローカル環境のfacebookログインでhttpsじゃないと怒られるときの対策

### 要約
ここ一年くらい、facebookのoauthログインでコールバックurlをhttpsにしないとローカルでもログインできなくなった。この記事のやり方で成功したのでメモ。ただし開発モードしかだめ。

### 詳細
https://stackoverflow.com/a/53120370
>enable Client OAuth Login and write “localhost:3000” in Valid OAuth Redirect URIs.
Save changes. it will automatically change to https://localhost:3000 , but it doesn’t matter…
And set Status: In Development (THIS IS IMPORTANT!)
Then it will work in your http localhost.

この記事の通り
– `https://localhost:3000/xxx`(xxxはコールバックのパス)で登録。(portは自分はrailsなので30

元記事を表示

【Docker】Rails+MySQLの環境をDockerで構築中「ポートの衝突」に遭遇してから解決するまで

## はじめに
Dockerで**Ruby on Rails + MySQLの環境**を構築中にいわゆる**「ポートの衝突」**に遭遇したので解決までを記載します。

同じような箇所でハマった方の参考になればと思います。

## この記事が役に立つ方
– DockerでRails+MySQLの開発環境を行いたいと考えている
– Docker初心者

## この記事のメリット
– ポートの衝突を回避する方法が分かる

## 環境
– macOS Mojave バージョン10.14.6
– シェル:zsh
– Ruby:2.6.5
– Rails:5.2.2
– MySQL:5.7
– Docker:19.03.5

## Dockerfile

こちらを参考に、rubyのバージョンのみ、現行安定版である**2.6.5**にしています。
[丁寧すぎるDocker-composeによるrails5 + MySQL on Dockerの環境構築(Docker for Mac) – Qiita](https://qiita.com/azul915/items/5b7063cbc80192343f

元記事を表示

rails javascript/jqueryの実装 実践編

実際に実装方法を書いて行きます。

# コントローラー(respond_to)
Railsのコントローラーで利用できる respond_to というメソッドは
「リクエストがHTMLそれともJSONのレスポンス求めているのか」を条件に条件分岐してくれます。

 HTMLを返す場合は、該当するビューを呼びその中でデータを生成していましたが
 JSONを返す場合はRubyのハッシュをrenderメソッドの引数として渡すだけでJSONに変換されます。

“`ruby:controller
respond_to do |format|
format.html { render … } # この中はHTMLリクエストの場合に呼ばれる
format.json { render … } # この中はJSONリクエストの場合に呼ばれる
end

# 例
respond_to do |format|
@comment = Comment.create(comment_params)
format.html { redirect_to :root }
format.

元記事を表示

rails javascript/jqueryの実装 単語編

railsの使い方の次の段階で
javascriptとjqueryの実装を書いて行きます。

# Ajax(非同期通信)
Ajax(エイジャックス)と呼ばれます。
非同期通信は英語で”Asynchronous JavaScript + XML”と表現され、略された呼び方です。

リクエスト後にレスポンスが帰ってきた際、ブラウザが再読み込みされること無く通信が行われる通信方法です。

## 非同期通信の実装ポイント

### ① 非同期通信ではJavaScriptを利用してリクエストを行う
    リクエストに対してのレスポンスはJSON形式で返してほしい旨をリクエストに含めます。
### ② コントローラでJSON形式のデータを用意するよう準備
    リクエストにJSON形式で返してほしい旨の情報が含まれているため
    コントローラのアクションに明記する必要があります。
### ③ レスポンスするためのJSON形式のデータを準備

    viewsディレクトリの中にファイルを作っておく必要があります。

    同期通信では
    ○○.html.erbという形式でHTMLの

元記事を表示

[Rails]環境変数って何だろう?作る理由と作り方

# 環境変数について

まだRailsを勉強し始めて1ヶ月半くらいなのですが、アプリのデプロイ中に環境変数というものに出会ったので

– 環境変数を作る理由
– 環境変数の作り方

について調べていこうと思います。

## 環境変数を作る理由について

例えばGithubにソースコードをあげた際に秘密鍵などをそのまま書いてしまっていると、第3者が`その鍵を知ることができてしまい`ます。これを防ぐために環境変数をOS上に保存しておき、`<%= ENV["SECRET_KEY"] %>`のようにプログラムから変数として呼び出して使用します。

## 環境変数の作り方

今回は `~/.bash_profile`に書く方法をメモしておきたいと思います。
DOTENVで書く書き方は以下の記事がとてもわかりやすいです!

[[Ruby on Rails]環境変数の設定方法(.bash_profile、Dotenv-rails)](https://qiita.com/yuichir43705457/items/7cfcae6546876086b849)

まず、開発環境でも本番環境でもどちらも

元記事を表示

ActiveRecord でのデフォルト値設定

Rails ActiveRecord model で各フィールドのデフォルト値を設定するには、主に以下の2つの方法があります。

#### 方法1: Database の column の default 値を使う

Database の table schema で column の `default` 値を指定します。

“`ruby
class CreateColors < ActiveRecord::Migration[5.0] def change create_table :colors do |t| t.string :name, default: 'black' t.integer :red, unsigned: true, limit: 1, null: false, default: 0 t.integer :green, unsigned: true, limit: 1, null: false, default: 0

元記事を表示

Grapeで必要最小限 rails 6.0.1

“`Gemfile
gem ‘grape’
“`

“`config/routes.rb
Rails.application.routes.draw do
mount Api => ‘/api’
end
“`

“`app/api/api.rb
class Api < Grape::API mount V1::Root end ``` ```app/api/v1/root.rb module V1 class Root < Grape::API format :json #version 'v1' version 'v1b' get '/' do { hello: 'world' } end end end ``` ``` bundle exec rails s ``` でサーバを起動し、ブラウザでhttp://localhost:3000/api/v1bをみる。 ```ブラウザ表示 {"hello":"world"} ``` ## 参考 ``` https://qiita.com/yuknak/

元記事を表示

memo

memo
Herokuにクレジットカード情報を登録しておく。

“`console:console
brew tap heroku/brew && brew install heroku

https://devcenter.heroku.com/articles/heroku-cli

heroku –version

heroku login

cd ~/myapp
heroku create

git remote -v

git push heroku master

heroku run rails db:migrate

heroku addons:add cleardb

heroku config | grep CLEARDB_DATABASE_URL

heroku config:set DATABASE_URL=’mysql2://aaaaa:bbbbb@ccccc.cleardb.net/heroku_ddd?reconnect=true’

$ git push heroku master
$ heroku run rake db:migrate
$

元記事を表示

【Rails】パーシャルを利用する

Railsではviewファイルで使う部品(パーシャル)を作り、他のviewファイルから呼び出して利用することができます。
##パーシャルの基本ルール
・ファイル名はアンダースコアから始まる
・`render ‘{ファイル名}’`で呼びだす
・パーシャルが同じディレクトリにある時は`render ‘{ファイル名}’`、違うディレクトリの時は`render ‘{ディレクトリ名/ファイル名}’`で呼びだす。(拡張子不要)

##使ってみる
簡単なTODOアプリのエラーメッセージをパーシャル化して利用します。
・[Ruby on Railsで簡単なアプリを作成](https://qiita.com/d0ne1s/items/5e63dde992f20f25b8bb)
・[TODOアプリにバリデーションを追加する](https://qiita.com/d0ne1s/items/822f66d16d65ae28162b)
###パーシャルを作成
“`erb:/app/views/shared/_error_messages.html.erb
<% if @task.errors.any? %>

元記事を表示

【Rails】TODOアプリにバリデーションを追加する

[シンプルなTODOアプリ](https://qiita.com/d0ne1s/items/5e63dde992f20f25b8bb)にバリデーション(入力制限)を追加していきます。

バリデーションは`create`、`save`、`update`などのメソッドが呼び出されたタイミングで実行されます。

##バリデーションを追加する
タスクの最大文字数を20文字に設定するバリデーションをmodelに記述します。
文法は`validates :{カラム名}, {ルール名}: {ルールの内容}`です。

“`/app/models/task.rb
class Task < ApplicationRecord validates :title, length: {maximum: 20} end ``` ##エラーメッセージを表示する バリデーションに失敗するとfalseが返され、`@{オブジェクト名}.errors.full_messages`でエラーメッセージの配列を取得することができます。 まずはControllerを修正し、エラーが発生した場合時にトップページに移動しないよ

元記事を表示

Railsで外部キー追加時に「型の不整合」で失敗する場合の対応

# 環境

– Rails 5.2.2.1

# エラー内容

`add_foreign_key`などで外部キー制約をつけようとすると、`rails db:migrate`が失敗して以下のエラーが出る。

“`ruby
Mysql2::Error: Referencing column ‘user_id’ and referenced column ‘id’ in foreign key constraint ‘fk_rails_85591c599e’ are incompatible.
“`

# 原因

「外部キー(`user_id`)」と「参照先テーブルのカラム(`users`テーブルの`id`)」の型が異なっている。
よくある例としては、`Rails5.1`から`id`カラムが`bigint`になったが、過去に作成したテーブルの`id`カラムが`int`のままの場合。

# 対応方法

`id`カラムを`bigint`にする。

“`ruby:db/migrate/20190000000000_xxx.rb
class SomeMigrationFile < Active

元記事を表示

Rails model作成

#Model 作成メモ

### 開発環境
– pc:macOS Catalina 10.5.1
– ruby:2.6.3
– rails:6.0.1

### migarat fileの作成

**コマンド**
`rails g model モデル名(単数形) カラム名1:データ型 カラム名2:データ型2…..`

**migrate fileの確認**
Path:`root/db/migrate/…`

“`ruby
class CreateBoards < ActiveRecord::Migration[6.0] def change create_table :boards do |t| t.string :name t.string :title t.text :body t.timestamps end end end ``` ### migrate fileの実行 **コマンド** `rails db:migrate` ### migrate fileのキャンセル(roll bac

元記事を表示

Action Mailer でメール送信機能をつくる

##概要

**Action Mailer**を使ってメールの送信機能をつくります:speech_balloon:
今回は管理者がユーザーからのお問い合わせに対して、管理者画面から返事をすると、
ユーザーにメールで送信される機能を実装していきます。

学習メモとして記録 :writing_hand_tone4:

##参考

(1)[RAILS GUIDES: Action Mailer の基礎](https://railsguides.jp/action_mailer_basics.html)
(2)[【Ruby on Rails】メール送信の実装手順(ActionMailer)とはまったエラーなど](https://normalblog.net/system/rails-actionmailer/)
(3)[Railsでメール自動配信機能をつくるまでの道程](https://qiita.com/Yama-to/items/823baf26bba3193712ea)
(4)[Rails の ActionMailer でメール送信処理](https://qiita.com/hirot

元記事を表示

【vue.js】チェックボックスでチェックされているときとチェックされていないときでそれぞれ値を送る方法

#はじめに
最近、Rails+Vue.jsの組み合わせで使う必要があり、備忘録的につまったところを残していこうと思います。
今回はタイトルにもある通り、チェックされているときとチェックされていないときにそれぞれ値を送る方法についてまとめました。
もっと良い感じに書けるなどありましたら、コメントいただけると嬉しいです。。

#実装してみる
##erbの場合
`erb`の場合、下記で実現できます。

“`erb
<%= f.check_box :is_mon_monthly_contract, {checked: child_fee.plan.is_mon_monthly_contract_target?}, :target, :non_target %>
“`

これでチェックされている場合は`target`、チェックされていない場合は`non_target`が送られます。
ちなみにinput要素のチェックボックス自体にチェックされていない場合の値を指定する方法はないようです。
でも、erbでは実現できているじゃないか。。と思い調べてみたところhiddenを使用することで実現している

元記事を表示

不鮮明な部分

後で穴埋めする

名前付き

9以降

元記事を表示

基本的な部分

抜けて検索しがちな知識や単語を書く

元記事を表示

Ruby 条件分岐 繰り返し処理 総集編

ruby 総集編 part2
ここでは処理の仕組みや流れを解説します
※ググればすぐ出る、メソッドの意味などは割愛します。

お題
・条件分岐 if~end
・繰り返し処理 while true do~end

本題
●条件分岐 if~end
スクリーンショット 2019-11-21 0.07.16.png
注意点
コードを読む順番
def~endは、無視されます
if内のpost_reviewがpost_reviewをメソッド呼び出します。
※defとはメソッドを定義するコードです
スクリーンショット 2019-11-21 0.12.34.pngdevise+omniauth-rails_csrf_protection+[facebook/google]を使ったユーザ登録とログイン

##この記事で解決できること
deviseを使ったSNS認証ログイン
snsのユーザ情報を利用して登録フォームに入力する

**メールアドレスで登録するとき**
スクリーンショット 2019-11-21 6.07.31.png

**snsを使って登録するとき**
スクリーンショット 2019-11-21 6.05.44.png

##開発環境
MacOS Mojave 10.14.6
ruby 2.5.1
Rails 5.2.3
mysql

元記事を表示

Template repositoryを使って、Rails on Dockerの初期設定を共通化させてみた

## Railsプロダクトを作るたびに、毎回Rails環境作るの面倒…

と思うことありませんか?

私の場合は
Dockerの設定して…
いつも使うGemの設定して…
CircleCI設定して…
細かい調整してと…

DockerでRails環境を作成するために、やるようなことって
ちょっと面倒な割りに、共通化出来ることありますよね。

そういう時は、GitHubの新機能である `Template repository` を使ってみるといいです!

参考

Generate new repositories with repository templates

## Template repositoryの説明

手短に説明するとこんな感じです。

– Template repositoryとしてセッティングしたリポジトリのファイルをコピーした状態で新しいリポジトリを作成出来る
– しかし、commit履歴は引き継がないので、ファイルだけコピーしたい場合に重宝する

### 何が便利か?

毎回行うよう

元記事を表示

OTHERカテゴリの最新記事