- 1. Ruby on Railsでアプリを作ってみよう②
- 2. Ruby on Rails6でのjQueryの実装方法(Windows10 + 仮想環境)
- 3. Railsのルーティングについて学び直そうと思う…①
- 4. #Rails redirect_toではhttpリクエストをgetからdeleteに変更できない!?
- 5. Docker ComposeでApache+Rails環境を構築
- 6. 【Rails】【Controllerから外部APIを叩く】 OpenWeatherMap APIで天気情報を取得
- 7. Rubocopの導入
- 8. [Rails] gem jsonを使って、APIを叩く。
- 9. RailsでPostgreSQLを使うぞ!「FATAL: role “postgres” does not existの解消」にむけて
- 10. 複数の画像投稿/表示をさせたいとき(refile使用)
- 11. Formオブジェクトを用いて作成したデータを、編集・更新する方法
- 12. [Rails]DRYに書きたい(可読性、保守性)
- 13. [Rails]認可、認証、権限関連
- 14. [Rails]セキュリティ系
- 15. [Rails]DB,ActiveRecord系
- 16. [Rails]ルーティング系
- 17. [Rails]Controller系
- 18. [Rails]View系
- 19. [Rails]Model系
- 20. [Rails]機能要件の逆引きリファレンス
Ruby on Railsでアプリを作ってみよう②
##MVC(エム・ブイ・シー)
Railsを始めアプリケーションの処理を表しています。
M=モデル
V=ビュー
C=コントローラーこれからアプリケーションの処理の流れを順番に解説していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1008745/6d644d84-be80-590b-84e0-aaf7fc52f939.png)それではリクエストを振り分ける役割のルーティングから説明していきます
##ルーティング
クライアントからのリクエストに対して対応した行き先を指定します。
トップページをみたいというリクエストがあったとしたら、トップページを表示するための処理にいく道筋をたてます。
configディレクトリのroutes.rbに記述していきます。“`
Rails.application.routes.draw do
HTTPメソッド ‘URIパターン’, to: ‘コントローラー名#アクション名’
end“`
###HTTPメソッド
Webアプリ
Ruby on Rails6でのjQueryの実装方法(Windows10 + 仮想環境)
Rails5までの実装方法を試してみてもjQueryが動かなかったので調べてみると、
Railsのversionが上がり、Rails6になってからはjQueryの実装方法が変わったようなので、
自分の勉強もかねて、読んでくださる方々に共有させていただきます。※プログラミング初心者ですので、おかしい点などがありましたら指摘してもらえると助かります。
## 開発環境
– 使用PC:Windows10
– 仮想環境:vagrant + CentOS7
– テキストエディタ:VSCode
– Ruby version:ruby2.5.8
– Rails version:6.1.1## 実装したい環境
Ruby on Rails6での環境でjQueryを実装したい
## 目次
1. jQueryインストール
2. application.jsのファイル先の変更
3. Webpackの設定
4. application.jsの設定
5. 外部ファイル作成#### 1. jQueryインストール
Rails5までのverでは、GemfileにjQueryを記載して`bundle
Railsのルーティングについて学び直そうと思う…①
#はじめに
学習初期から、ルーティングについては、`resources`を使うことが多かったので、よく理解できていない部分が多々あったので、少しずつ調べて紹介していこうと思います。##リソースを同時に定義する
“`ruby
resources :users
resources :admins
“`“`ruby
resources :users, :admins
“`
上の2つは全く同じです。
`resources`を全て使うなら、まとめた方が読みやすいですね。
#Rails redirect_toではhttpリクエストをgetからdeleteに変更できない!?
#Rails redirect_toではhttpリクエストをgetからdeleteに変更できない!?
rails 5.2.2
を使ってます。今回はユーザーの退会ボタンを押したら退会処理がなされてかつ、ログアウトされ、ログイン画面に飛ばすような設計にしてそれを実装しようとしていたのですが、そこで問題が発生しました!!
それは退会処理後のログアウトを呼び出そうとして
redirect_to user_sessions_path
を実行したところ、「httpリクエストがgetですよ」とのことでdeleteに修正しようとしたが
残念
redirect_to user_sessions_path, method: :delete
ではできなかった
これ以上解決方法が浮かばなかったのでいろいろ調べたところ
deleteになってしまった場合はstatusコードを編集することでgetにできるらしいが
getからdeleteは無理なようだ・・・
postは指定できないことは知っていたがまだredirect_toに弊害があったとは・・・皆さんもきおつけてくださいね
僕はこれに2時間近く囚われて
Docker ComposeでApache+Rails環境を構築
# 最終的なフォルダ構成
“`:最終的なフォルダ構成
myapp/
|–docker-compose.yml
|–apache/
|–html/
|–rails/
|–app/
|–bin/
|–config/
|–db/
|–lib/
|–log/
|–public/
|–storage/
|–test/
|–tmp/
|–vendor/
|–config.ru
|–Dockerfile
|–entrypoint.sh
|–Gemfile
|–Gemfile.lock
|–Rakefile
|–README.md
|–.env
|–.gitignore
|–.git“`
# .git
Gitの初期化を行う
【Rails】【Controllerから外部APIを叩く】 OpenWeatherMap APIで天気情報を取得
# はじめに
外部APIを叩くという経験が初めてだったので、どんな大変な作業が待っているのだろうと心構えをしていたのですが、驚いたことに
`実は難易度が低くて、高機能が実装できるハイコスパな方法`でした。
今回実装した機能の概要は以下の通りです。メモ程度ですが参考程度に載せておきます。![API概要.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688968/14f69d43-0d88-5126-639e-7eb09975725f.jpeg)
# 前提
– deviseでユーザーに関する機能作成済み
– food_record(料理記録)モデルを作成済み
– new, createなどの基本的な機能は既に実装済み# 環境構築
– Ruby2.7
– Ruby on Rails6# API_KEYの取得
[OpenWeatherMap](https://openweathermap.org/)で会員登録して、API_KEYを取得します。こちらは、多くの記事が出回っているので、割愛させて頂き
Rubocopの導入
##はじめに
オリアプ制作で**Rubocop**を導入したので、載せておこうと思います。
( **Rubocop**:静的コード解析ツールのことで、余分なスペースやインシデントが揃っていないなどを指摘・修正してくれるGem )
オリアプのコードは誰かに直接見てもらう事はないので、導入する必要はないかなと思ったのですが、今後使用するかもしれないと思い、導入しました。##1.Gemの導入・ファイル作成
**1.Gemfileにrubocopを記述し、bundle installする。
コードはgroup :development do ~ end 内に記述する。**“`ruby:Gemfile
group development do
#中略
gem ‘rubocop’, require: false
end
“`**2.rubocopの設定コードを記述するファイル ( .rubocop.yml ) をプロジェクト直下に作成する。**
##2.Rubocopの設定
作成した .rubocop.yml に設定用のコードを記述していく。
以下のコードはあく
[Rails] gem jsonを使って、APIを叩く。
今回は、weather APIにしました。(https://openweathermap.org/)
## APIの取得方法
“`ruby
gem json
“`“`ruby
def home
require ‘net/http’
require ‘json’@url = ‘http://api.openweathermap.org/data/2.5/weather?q=berlin,de&appid=ここにapikey。’
@uri = URI(@url)
@response = Net::HTTP.get(@uri)
@output = JSON.parse(@response)
end
“`output
“`ruby
<%= @output %>
“`です。
RailsでPostgreSQLを使うぞ!「FATAL: role “postgres” does not existの解消」にむけて
#はじめに
Railsチュートリアなんとか一通り終え(理解度としては3割程度なので終えたと言えるかどうかはおいといて…)、
自身のローカル環境にてRuby, Railsの環境を構築する際に発生した問題に関して、自身のメモのため、初学者の方で同様の問題が発生した方向けに投稿します!#開発環境
* macOS Catalina 10.15.7
* MacBook Pro (13-inch, 2020, Two Thunderbolt 3 ports)
* プロセッサ 1.4 GHz クアッドコアIntel Core i5
* メモリ 8GB* Ruby 2.5.7
* Rails 5.2.3
* PostgreSQL 13.1#導入までの一連の流れに関して
一連の環境構築までの流れに関しては下記記事が大変参考になると思いますので、ぜひ見てください。
今回はPostgreSQLの導入部にフォーカスして記事を作りたいと思います!>【完全版】MacでRails環境構築する手順の全て
https://qiita.com/kodai_0122/items/56168eaec
複数の画像投稿/表示をさせたいとき(refile使用)
Railで作成するアプリ内で写真投稿や表示をさせたい時にrefileを使う方へ。
下記の手順で本来であれば1枚のみしか投稿・表示できないところ、
複数の写真を投稿・表示できるようになります。###1.rifleの準備
Gemfileに下記を記入後、「bundle install」ください。“`
gem “refile”, require: “refile/rails”, github: ‘manfe/refile’
gem “refile-mini_magick”
“`###2.テーブルの作成
複数枚の写真を投稿・表示させる場合、
「写真を表示させるモデル」と「写真を保存しておくテーブル」が必要になります。“`db/schema.rb
create_table “shops”, force: :cascade do |t|
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
endcreate_table “shop_images”, force: :ca
Formオブジェクトを用いて作成したデータを、編集・更新する方法
#要点
+ 初心者がアプリを作るときの参考に
+ formオブジェクトを用いた編集・更新機能は複雑なので詳しく知りたいorおさらいしたい
+ 下記のエラーを解消する方法“`
param is missing or the value is empty: ‘Formオブジェクト名’
“`#はじめに
メルカリのようなフリマアプリを作成中で、Formオブジェクトを用いて商品にタグ付けして編集・更新(edit・update)する機能を実装まで行いました
各モデルとコントローラーは以下のようになります+ Item/商品
+ Tag/タグ
+ TagItemRelation/商品とタグの中間テーブル
+ TagsItem/ ItemとTagを同時に保存するためのFormオブジェクト“`ruby:/app/model/item.rb
class Item < ApplicationRecord has_many :tag_item_relations, foreign_key: :item_id, dependent: :destroy has_many :tags,
[Rails]DRYに書きたい(可読性、保守性)
[Rails]似たようなコードを1つにまとめたい(パーシャル)
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-partials[Rails]DRYなコードを書きたいが、一部分が違う場合
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-edit_form[Rails]タイトルの可変要素をDRYする
https://railstutorial.jp/chapters/static_pages?version=5.1#sec-layouts_and_embedded_ruby
https://qiita.com/shumpeism/items/a0ad5930fa3bc0d24c70[Rails]汎用性があるので異なるControllerでも定義したメソッドを使いたい
継承→application_controller.rb
https://railstutorial.jp/c
[Rails]認可、認証、権限関連
[Rails]ログイン済みのユーザーだけにページを表示させたい
Controller
before_action :logged_in_user, only: [:edit, :update]
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-authorization[Rails]自分だけを編集したい
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-requiring_the_right_user[Rails]ユーザーがログインした後、ログイン直前に閲覧していたページヘとリダイレクトさせる機能
→ログインユーザー専用のページのURLにアクセスしたい→ログインする→さっき見てたログイン専用のページに行ける
フレンドリーフォワーディング request.url
https://railstutorial.jp/chapters/updating_and_deleting
[Rails]セキュリティ系
[Rails]ストロングパラメーター(Strong parameters)
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-revisiting_strong_parameters
[Rails]マスアサインメント
→リクエストのデータをそのままデータベースに保存すること(セキュリティ的に弱い)
https://thinkit.co.jp/story/2015/09/03/6389[Rails]作業を元に戻したい!
rails destroy controller ~
https://railstutorial.jp/chapters/static_pages?version=5.1#sec-generated_static_pages[Rails]アカウントの有効化
https://railstutorial.jp/chapters/account_activation?version=5.1#cha-account_activation[Rails]SSL
ローカ
[Rails]DB,ActiveRecord系
[Rails]カラム名を変更したい
https://qiita.com/libertyu/items/93acd8733e34b1d0a63c[Rails]シードを作る(サンプルユーザーをDBにたくさん作りたい)
https://qiita.com/takehanKosuke/items/79a66751fe95010ea5ee
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-sample_users
https://teratail.com/questions/7371[Rails]マイグレーションファイルを削除する
https://qiita.com/tanaka-t/items/cd6aa0526725e88f5024[Rails]ActiveRecordのSQLの可読性をあげたい →Scope
https://qiita.com/ngron/items/14a39ce62c9d30bf3ac3[Rails]複数テーブルにまたがる検索をしたい
https:/
[Rails]ルーティング系
[Rails]localhost3000/の状態でトップページを表示したい(3)
→root
https://railstutorial.jp/chapters/static_pages?version=5.1#sec-setting_the_root_route[Rails]RESTfulなルーティング
https://railstutorial.jp/chapters/sign_up?version=5.1#table-RESTful_users
https://qiita.com/NagaokaKenichi/items/0647c30ef596cedf4bf2[Rails]resourceを使ったRESTfulなルーティングにRESTful以外の新しいアクションを追加したい。
https://qiita.com/ebihara99999/items/37afb1486442e7c16a8a
https://railstutorial.jp/chapters/following_users?version=5.1#sec-stats_and_a_follow_form
[
[Rails]Controller系
[Rails]フォームの入力に失敗した時の実装
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-unsuccessful_edits[Rails]Railsのredirect_toにおける_pathと_urlの使い分け(同じようなもの)
https://teratail.com/questions/204077[Rails]部分テンプレートを呼び出したい
render ‘ファイル名’
https://pikawaka.com/rails/render[Rails]Destroyアクションとセキュリティ
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-the_destroy_action[Rails]newとbuildの違い
newメソッドとbuildメソッドはともにインスタンスを生成するが、
buildは自動的にuser_idをセットしてインスタンスを生成す
[Rails]View系
[Rails]ページネーション(ページ分割)
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-pagination[Rails]編集フォーム
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-edit_form[Rails]ラクに編集フォームを作りたい
https://qiita.com/Toshimatu/items/dbf4da62ab9951b67aa9[Rails]一覧表示させたい
https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#sec-showing_all_users[Rails]部分テンプレートを呼び出したい
render ‘ファイル名’
https://pikawaka.com/rails/render[Rails]renderとredire
[Rails]Model系
[Rails]ActiveRecordはデータベースはデータベースのレベルでは一意性を保証していない(validateで一意性を保証したとしても)
→indexをつければ解決
https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-uniqueness_validation[Rails]データベースに保存する前に保存する内容を検証したい – バリデーション
https://railstutorial.jp/chapters/modeling_users?version=5.1#sec-user_validations[Rails]文字列などをランダムに出したい。乱数
https://docs.ruby-lang.org/ja/latest/class/SecureRandom.html
[Rails]機能要件の逆引きリファレンス
[Rails]検索機能
https://qiita.com/shin1rok/items/779e581e9d12a92310c3[Rails]画像検索 – 外部ライブラリ Ransack
https://qiita.com/LuckOfWise/items/e020e896e71d47d0c6a4
[Rails]文章投稿機能
https://railstutorial.jp/chapters/user_microposts?version=5.1#cha-user_microposts[Rails]画像を投稿したい
外部ライブラリ – CarrierWave
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-basic_image_upload
→投稿した画像が大きくなる
https://railstutorial.jp/chapters/user_microposts?versio