- 1. Active AdminでEnumsを用いた属性に基づいたチェックボックフィルタを作る
- 2. ローカル環境のfacebookログインでhttpsじゃないと怒られるときの対策
- 3. 【Docker】Rails+MySQLの環境をDockerで構築中「ポートの衝突」に遭遇してから解決するまで
- 4. rails javascript/jqueryの実装 実践編
- 5. rails javascript/jqueryの実装 単語編
- 6. [Rails]環境変数って何だろう?作る理由と作り方
- 7. ActiveRecord でのデフォルト値設定
- 8. Grapeで必要最小限 rails 6.0.1
- 9. memo
- 10. 【Rails】パーシャルを利用する
- 11. 【Rails】TODOアプリにバリデーションを追加する
- 12. Railsで外部キー追加時に「型の不整合」で失敗する場合の対応
- 13. Rails model作成
- 14. Action Mailer でメール送信機能をつくる
- 15. 【vue.js】チェックボックスでチェックされているときとチェックされていないときでそれぞれ値を送る方法
- 16. 不鮮明な部分
- 17. 基本的な部分
- 18. Ruby 条件分岐 繰り返し処理 総集編
- 19. devise+omniauth-rails_csrf_protection+[facebook/google]を使ったユーザ登録とログイン
- 20. Template repositoryを使って、Rails on Dockerの初期設定を共通化させてみた
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 herokuhttps://devcenter.heroku.com/articles/heroku-cli
heroku –version
heroku login
cd ~/myapp
heroku creategit 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
注意点
コードを読む順番
def~endは、無視されます
if内のpost_reviewがpost_reviewをメソッド呼び出します。
※defとはメソッドを定義するコードです
devise+omniauth-rails_csrf_protection+[facebook/google]を使ったユーザ登録とログイン##この記事で解決できること
deviseを使ったSNS認証ログイン
snsのユーザ情報を利用して登録フォームに入力する**メールアドレスで登録するとき**
**snsを使って登録するとき**
##開発環境
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` を使ってみるといいです!
参考
## Template repositoryの説明
手短に説明するとこんな感じです。
– Template repositoryとしてセッティングしたリポジトリのファイルをコピーした状態で新しいリポジトリを作成出来る
– しかし、commit履歴は引き継がないので、ファイルだけコピーしたい場合に重宝する### 何が便利か?
毎回行うよう