- 1. rails routes.rbのmemberとcollectionの違い
- 2. rails5中級チュートリアル中に発生したSassC::SyntaxError in Pages#index対処法
- 3. [ruby]2重ハッシュ
- 4. DM機能実装
- 5. ソースコードを読むとき
- 6. オブジェクト指向の継承についてとyieldについて Ruby
- 7. 既存のRailsアプリの開発環境にDockerを導入する手順【Rails, MySQL, Docker】
- 8. Railsアプリの開発環境をDockerで構築する手順【Rails, MySQL, Docker】
- 9. graphql-rubyを使って認可する方法
- 10. [rails]部分テンプレートの作成方法
- 11. active_hashを使って疑似モデルを作ろう 〜都道府県データ〜
- 12. AWS Elastic Beanstalk + Rails環境でnginxのconfがうまく反映されない場合
- 13. フォロー機能(Ajax)実装
- 14. Rails + postgres で jsonb の中の Array をクエリする方法
- 15. Graphql-rubyでのエラーハンドリング
- 16. コメント機能(Ajax)実装
- 17. No template for interactive requestの対処法
- 18. ターミナルでコマンドを実行した際にOperation not permitted が表示された場合の対処法
- 19. rails sを実行したら Address already in use と表示された時の対処法
- 20. docker rails db:migrateにてエラー(StandardError: An error has occurred, all later migrations canceled:)
rails routes.rbのmemberとcollectionの違い
## routes.rbのmemberとcollectionの違い
railsのroutes.rbでルーティングを設定する時にmemberとcollectionの違いに関して記載します。## menberの場合
“`routes.rb
resources :buy_additional_actions, only: %i[] do
member do
get ‘index’ => ‘buy_additional_actions#index’
“`menberの場合は生成されたurlに:idが自動で追加されます。
“`
buy_additional_action GET /buy_additional_actions/:id/index(.:format) buy_additional_actions#index
“`## collectionの場合
“`routes.rb
resources :buy_additional_actions, only: %i[] do
collection do
get ‘index’ =>
rails5中級チュートリアル中に発生したSassC::SyntaxError in Pages#index対処法
[rails5中級チュートリアル](https://techracho.bpsinc.jp/hachi8833/2018_02_06/51401)中にエラーが発生 以下エラー画像
####仮説と試したこと
エラー文の解説を翻訳してみると>>「エラー:インポートするファイルが見つからないか、読み取れません:bootstrap-sprockets。
app / assets / stylesheets / application.scssの15:1行
@import “bootstrap-sprockets”;」となる。 importの読み込み記述はされているが、sprocketsが存在しないことになっていると仮説。
[ruby]2重ハッシュ
## 内容
2重ハッシュから、全てのユーザーの名前だけが出力されるようにRubyでコーディングする!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/f0b40c36-a3fa-32a1-a915-ebb1b4a7a9f8.png)
ただし、出力結果は次のようになるものとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/df7e499d-1867-6d9b-cd8e-4eeb9beaff18.png)## 実装
配列なのでeachで値を引っ張って来ることが可能です!それではコードを書いていきましょう!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675525/99dc4214-baa8-e77f-7a75-1365ba5118e5.png)
ここで何をし
DM機能実装
自分用にまとめます。
# 必要なテーブル
#### users
ユーザーテーブル#### rooms
チャットルームをするための場所#### entries
チャットルームに入るユーザーを管理するテーブル#### messages
メッセージを管理するテーブル# 実装
####モデル作成
“`
$ rails g model room name:string
$ rails g model entry user:references room:references
$ rails g model message user:references room:references content:text
$ rails db:migrate
“`“`ruby:user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validat
ソースコードを読むとき
既存プロジェクトに入った際、各Classがどのようなメソッドをもっているかを確認する必要があると思います。
その際、自分がどのように確認を行っているかを以下で述べていこうと思います。
[環境]
Ruby
Rails
Solidus今回は、RailsのSolidusというGemを使って、説明させて頂ければと思います。
$rails c
でコンソールの中に入る。そこで、上記のように、任意の文字にオブジェクトを代入する。
(Spree::Taxonはオブジェクト)$a.methods
を実行。実行することで、そのオブジェクトが持っているmethodが表示される。オブジェクト指向の継承についてとyieldについて Ruby
# 継承について
オブジェクト指向に存在する継承という能力があるそうです。クラス定義した中身を書かずして利用したり、中で定義されているものをそのクラスで使いやすいように改造して使えるようになったりします。**メリット**
– 機能拡張、いわゆる、プラガブルな仕組みを作ることができる能力
**デメリット**
– 継承させすぎによる保守不全(大元を変更した瞬間、継承先で不具合が多発するなど・・・)
## 実際に使ってみる
“`keishou.rb
class Ball
attr_accessor :x, :y, :x_way, :y_way, :stepdef initialize(x: 1, y: 1, x_way: 1, y_way: 1, step: 1)
@x = x
@y = y
@x_way = x_way
@y_way = y_way
@step = step
enddef move
@x += @x_way
@y += @y_way
@step += 1
enddef reflect_x
if
既存のRailsアプリの開発環境にDockerを導入する手順【Rails, MySQL, Docker】
こんにちは.
今回は, 既存のRailsアプリの開発環境にDockerを導入する手順をまとめてみました.
まだまだ勉強不足ですので, 修正点・改善点等ございましたら, ご指摘いただけますと幸いです.#事前準備
– [Docker-for-macのインストール](https://hub.docker.com/editions/community/docker-ce-desktop-mac)
– 既存のRailsアプリ(今回は以前作成した簡単な家計簿アプリを使用します.)#環境
Ruby:2.5.3
Rails:5.2.4.3
MySQL:5.6
Docker:19.03.8
docker-compose:1.25.4#手順
###1. ルートディレクトリにDockerfile,docker-compose.ymlを追加
![add_file.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630434/b9f3d340-2791-3ed9-4905-cb0b37b0bdc1.png)
Railsアプリの開発環境をDockerで構築する手順【Rails, MySQL, Docker】
こんにちは.
今回は, Railsアプリの開発環境をDockerで構築する手順をまとめてみました.
まだまだ勉強不足ですので, 修正点・改善点等ございましたら, ご指摘いただけますと幸いです.#事前準備
– [Docker-for-macのインストール](https://hub.docker.com/editions/community/docker-ce-desktop-mac)#環境
Ruby: 2.5.8
Rails: 5.2.4.3
MySQL: 5.7.31
Docker: 19.03.8
Docker Compose: 1.25.4#手順
###1. プロジェクトのルートディレクトリを作成
“`:terminal
$ mkdir test-app
“`初めに, プロジェクトのルートディレクトリを作成します.
###2. ルートディレクトリ直下にファイルを追加
“`:terminal
$ cd test-app
$ touch Dockerfile docker-compose.yml Gemfile Gemfile.lock
“`
graphql-rubyを使って認可する方法
GraphQLを使っているときに様々な処理で認可させたい事があると思います。
* このQueryはログインユーザーのみ実行できるようにしたい
* このMutationは管理者のみ実行できるようにしたい
* このQueryは自分の所有しているデータのときだけ返却するようにしたい
* このFieldは自分の所有しているデータのときだけ返却するようにしたい当初はgraphql-rubyの知識が乏しかったので取得や更新処理の中で認可する処理を呼び出していたのですが、graphql-rubyのドキュメントを改めて読み直したところ、認可のためのメソッド(authorized?)がある事がわかったので動作検証を兼ねて記事を書きました。
# graphql-rubyについて
Ruby(Rails)でGraphQLを簡単に使えるようにしてくれるGemです。
https://github.com/rmosolgo/graphql-ruby細かいところは実際に試してみないとわからないことも多いですが、ドキュメントが充実していて素晴らしいです。
https://graphql-ruby.org/
[rails]部分テンプレートの作成方法
#部分テンプレートとは
「部分テンプレート」は、複数のページで共通して利用できるViewファイルのことです。
複数のファイルで重複しているコードを一つのファイルにまとまることで、修正時に一箇所だけの修正で済んだり、コードの記述が少なくなり可読性が高くなります。手順はざっくりこんな感じです。
1.共通化できる部分を探し出す
2.部分テンプレートファイルを作成
3.部分テンプレートファイルに共通化部分を記述
4.部分テンプレートファイルを呼び出す##1.共通化できる部分を探し出す
そのままですが、重複している箇所を探す作業です。##2.部分テンプレートファイルを作成
ファイル名の先頭にアンダースコア( _ )付きのerbファイルが、部分テンプレートファイルとして認識されます。今回は投稿機能を部分テンプレート化で見ていきます。
app/views/books/_newform.html.erb##3.部分テンプレートファイルに共通化部分を記述
共通部分を切り出し、ファイルに貼り付けます。
基本的に部分テンプレートファイルではローカル変数(@がないやつ)を使います。
部分テンプ
active_hashを使って疑似モデルを作ろう 〜都道府県データ〜
某メルカリコピーサイト作成中
#**active_hash**
>データベースを作ることなく擬似的にモデルを作成しデータを入れることができるとのことなので active_hash なるgemを使ってみます
まずGemfileにactive_hashを追加
“`ruby
gem ‘active_hash’
“`bundle install します
#Model
でモデルファイルを作っていくんですが
今回は rails g model では作成しない様普段はApplicationRecordを継承してるけど、
active_hashを使用するモデルはActiveHash::Baseを継承する必要があるからみたいなので直接 app/models/ に作成していきます
“`prefecture.rb
class Prefecture < ActiveHash::Base end ``` こんな感じで ActiveHash::Base を継承しますデータの雛形はこんな感じ
“`prefecture.rb
class Prefecture < A
AWS Elastic Beanstalk + Rails環境でnginxのconfがうまく反映されない場合
■方法
公式ドキュメントの通り、[.platform]配下にファイルを配置すれば反映されると思います。~/workspace/my-app/
|– .platform
| \`– nginx
| \`– conf.d
| \`– myconf.conf
`– other source files■公式ドキュメント
・Elastic Beanstalk Linux プラットフォームの拡張
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/platforms-linux-extend.html■おまけ
どうして公式に記載されている内容をわざわざ投稿したのかというと、全然検索に引っかからないからです。
[413 Request Entity Too Large]エラー対応でconfを編集する必要があり、
調べると2通りの記述方法が引っかかりました。1. [.e
フォロー機能(Ajax)実装
自分用にまとめます。
# 実装
モデル作成
“`
$ rails g model Relationship follower_id:integer followed_id:integer
$ rails db:migrate
“`マイグレーションファイル
“`20200723070930_create_relationships.rb
class CreateRelationships < ActiveRecord::Migration[5.2] def change create_table :relationships do |t| t.integer :follower_id, null: false t.integer :followed_id, null: false t.timestamps end end end ```“`ruby:relationship.rb
class Relationship < ApplicationRecord # フォローする
Rails + postgres で jsonb の中の Array をクエリする方法
難しかったのでメモ
### データの形
こんな感じのが jsonb のカラムの中に保存されている。“`json
{
hoge: String,
items: String[]
}
“`### やりたいことと解決策
それでやりたいのは `items` の中に特定の文字列 `[“a”, “b”, “c”]` のいずれかが含まれているものをクエリすること。結論としては次のようなコードでいけた。
“`ruby
items_to_query = [“a”, “b”, “c”]
Model.where(“jsonbColumnName -> ‘items’ @> ?”, items_to_query.to_json)
“`### 参考
https://stackoverflow.com/questions/35737931/rails-postgres-query-with-jsonb-array
https://www.postgresql.org/docs/9.4/functions-json.html
Graphql-rubyでのエラーハンドリング
# はじめに
最近、graphql-rubyでAPIを実装しています。
そこで、graphqlでのエラーハンドリングについて、ベストプラクティスを模索してみました。
まだ始めたばかりなので、もっといい方法あるよ!っていうコメント募集中です。
# エラーの分類
エラーハンドリングの実装に移る前にエラーにはいくつか種類があるので、紹介します。
以下の記事が非常にわかりやすく、まとまっていたので参考にしています。[Railsアプリケーションにおけるエラー処理(例外設計)の考え方](https://qiita.com/jnchito/items/3ef95ea144ed15df3637)
ここでは、以下のように異常系と準異常系の2つに分類します。
– 異常系:nwエラーや、プログラムのエラー(システムエラー)
– 準異常系:作り手が予期できるエラー(業務エラー)この2種類のエラーに対して、以下のような要件があります。
– 異常系:フロント側でテンプレートメッセージを表示 & 開発者に通知
– 準異常系:エラー内容や回避方法をフロント側(この辺りは要件によって変わってくるかもしれま
コメント機能(Ajax)実装
自分用にまとめます。
# 実装
**コントローラー・モデル作成済み**
“`ruby:routes.erb
resources :posts do
resources :comments, only: [:create, :destroy]
end
“`コメントはpostsのshowページで投稿や一覧表示、削除など行うため、createとdestroyのみ作成。
“`ruby:comments_controller.rb
class CommentsController < ApplicationController def create @post = Post.find(params[:post_id]) @comment = @post.comments.new(comment_params) @comment.user_id = current_user.id @comments = @post.comments.all @comment.save render :create
No template for interactive requestの対処法
アプリ作成中にNo template for interactive requestが発生した。
####エラー
私の場合は
No template for interactive request
PagesController#index is missing a template for request formats: text/htmlであった。
“`ruby:routes.rb
Rails.application.routes.draw do
resources :pages
root ‘pages#index’
end
“`“`ruby:pagescontroller
class PagesController < ApplicationController def index end end ``` ビューファイルもしっかりapp/view/pagesにindex.html.hamlで作成していたので、原因がわからず解決できなかった。 ####原因 PagesController#index is missing a templ
ターミナルでコマンドを実行した際にOperation not permitted が表示された場合の対処法
#####[rails中級チュートリアルアプリ作成](https://techracho.bpsinc.jp/hachi8833/2018_02_06/51401)
の最中にトップページへのルーティング、コントローラー作成をし、rails sを実行しようとしたところ、“`ruby:ターミナル
Operation not permitted
“`
と、エラー文が表示されてしまった。####解決法
システム環境設定→セキュリティとプライバシー→プライバシー→左に並んでいる中からフルディスクアクセスを選択→ターミナルにチェックを入れる。これでターミナルを再起動すると解決する事ができた。
####参考サイト
rails sを実行したら Address already in use と表示された時の対処法
####アプリ作成中にこのエラーに遭遇したため記録しておく
####解決したい事
rails sを行うと“`ruby
Address already in use – bind(2) for “127.0.0.1” port 3000 (Errno::EADDRINUSE)
“`とターミナルに表示されてしまいrails sを実行できない
####解決法
#####すでにrails sが他のターミナルなどで実行されているかを確認。
rails sが実行されているのが確認できなければ
“`ruby:ターミナル
% ps ax | grep rails
“`
を打ち込み出てきたプロセス番号を“`ruby:ターミナル
% kill -9 プロセス番号
“`
でプロセスを止めることで解決する事ができる。
docker rails db:migrateにてエラー(StandardError: An error has occurred, all later migrations canceled:)
Qiita初投稿となります。よろしくお願いします。
# 環境
– image: mysql:5.7
– FROM ruby:2.6.3
– Rails 5.2.4.3# エラー
docker環境で構築したrailsにて、docker-compose exec web rails db:migrateとしたところ、以下エラー
“`
rails aborted!
StandardError: An error has occurred, all later migrations canceled:Mysql2::Error: Invalid use of NULL value: ALTER TABLE `tasks` CHANGE `name` `name` varchar(255) NOT NULL
….以下省略“`
# 原因
完全な特定には至らなかったが、以前行ったマイグレーションの処理がうまくいっていない可能性がある。テーブル作成周りでエラーが出ていた。
エラーのMysqlに関しては修正しているはず・・・。#解決方法
データベースのリセットを行う。