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

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

#Rails + rack-cors で CORS の ORIGINS を指定 / curl で動作確認 / request spec でテストケースを書く

# Gem

rack-cors

[cyu/rack-cors: Rack Middleware for handling Cross-Origin Resource Sharing (CORS), which makes cross-origin AJAX possible.](https://github.com/cyu/rack-cors)

# CORS とは

– リソース共有のための仕組み。
– CORSを指定したからと言ってセキュリティ対策になるわけではなく、むしろ逆。ドメインを共有できるようになるので、セキュリティリスクは増す。
– CORSを許可する場合は、許可する ORIGINとしてワイルドカードを指定せず、可能であればホワイトリストを指定する。
– セキュリティ的なデフォルト挙動が「同一オリジンポリシー」に準拠したものであり、CORSがその間口を広げる。

# 設定

– Rails構成のAPIサーバーを想定
– localhost:3000 で API サーバーがつながるものとする
– application.rbに以下を設定してサーバーを再起動する

元記事を表示

【18日目】Rails5 (投稿の制限)

#はじめに
こんばんは。
今日もアウトプットしていきます。

#学習内容
– progate Rails 5
– progate Rails 6

##バリテーション
不正なデータの保存を防ぐ

“`rb
validates :content, {presence:true,length:{maximum:140}}
#presence:trueで空の投稿を防ぐ
#maximum:140で140字以上の投稿を防ぐ
“`
##投稿時のリンク

“`rb
if @post.save
redirect_to(“/posts/index”)
else
redirect_to(“/posts/#{@post.id}/edit”)
end
“`

##直前の投稿の表示

通常は
1. 投稿失敗時にeditアクションに転送
2. データベースから編集前のデータの取得
3. editアクションで取得したデータの表示

editアクションを経由しないようにする
renderメソッドを使う

“`rb
render(“posts/edit”)
“`

##エラー

元記事を表示

商品出品画面を作る②ActiveStorage(複数画像投稿)

# ActiveStorageを使用して複数枚の画像を投稿する
先ずはここを見てください[Railsガイド](https://railsguides.jp/active_storage_overview.html)、導入方法とか書いてあります。
S3に接続するときは注意が必要ですね。

### そもそもActiveStorageは何がいいのか?
ActiveStorageの特徴としては画像をitemモデルとして扱えることでしょう。
どう言う事かと言うと、itemとimageが1:多の関係だとすると、テーブルを2個用意しないといけません。
そしてアソシエーションを組んで〜と言う処理をします。
削除や変更の時に処理が若干複雑になってしまいます。
そんな時、ActiveStorageならitemテーブルのみを対象に処理をすれば良いわけです。

### 今回の要件
– 複数同時選択による複数枚の画像投稿
– 複数回選択による複数枚の画像投稿
– プレビュー表示
– 投稿枚数管理
– プレビューの削除

“`ruby:imet.rb
has_many_attached :images
“`

元記事を表示

ユーザーの新規登録時に入力なしの初期値を設定する【Ruby on Rails】

### 目的
ユーザーの新規登録時に、直接入力させずにテーブルに初期値を保存させること。

### 使用する技術
– gem devise

# 実践
以下のテーブルが作成してあるとします。

|Column|Type|Options|
|——|—-|——-|
|username|string|null: false, unique: true|
|email|string|null: false, unique: true|
|password|string|null: false|
|coin|integer|null: false|

今回は、ユーザー登録フォームで

– username
– email
– password

の3項目をのみを入力させます。
ここで、**coinカラムは入力させずに、初期値0としてテーブルに保存します。**

### 事前準備
すでに、gem deviseが導入され、コントローラとビューの作成が終了しているものとします。
(このような画面まで用意されている所からです)
devis</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>Rails</div>
<div class='tag-cloud-link'>devise</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/tomoya_sepia/items/78b8333d2908256069a1'>元記事を表示</a></div>
<h3 id=Reinitialized existing Git repository in が出たときの対処法

## はじめに
ただの備忘録のうちのひとつ。将来のために、、、

## git init したときのやつ
“`
$ git init
Reinitialized existing Git repository in ~
“`
## 結論:やることない
特にやることない。Reinitializedとか言うから「初期化して最初から⁉」とか思ってたけどそうではないらしい。

## 関係ないけど
名前とメールの確認もたまにしたくなる

“`
$git config –global –list
user.name=hogehoge
user.email=hoge@gmail.com
“`

###### 参考
https://qiita.com/ragingalpaca/items/ef247e459ff2e7759ba9

gitのauthorの確認と変更

元記事を表示

チーム開発 3/24

#メモです
商品出品機能のサーバーサイドを作っていく

画像を貼る際にすぐに画像が
プレビューできるようにする
複数画像を送信できるようにする

使うメソッド
fields_forは,file_fieldや collection_check_boxesなどと
同じくフォームのインプット要素を生成するフォームヘルパーです。
1つのリソースに対し紐づいた、
複数の別のリソースを同時に保存したい際に利用します。
例えば今回のような1投稿に対して複数の画像をつけるパターンや、
1投稿に対して複数のタグをつける時などにも利用できます。

“`ruby
<%= form_for @product do |f| %>
商品名<%= f.text_field :name %>
価格<%= f.number_field :price %>
<%= f.fields_for :images do |i| %>
<%= i.file_field :src %>
<% end %>
<%= f.submit %>
<% end %>
“`

accept

元記事を表示

Railsフリマアプリ payjpを使ってクレジットカードを登録・削除

# payjp とは・・・?
`クレジットカードを登録、変更、購入を行ってくれる便利なAPIです。`
みんさんもフリマアプリ、ECサイトでクレジットカードを使って商品の購入すると思います。その時登録したクレジットカード情報はどこに保存されているでしょうか?私は運営するサイトで暗号化されて管理されているのだと思っていましたが、違うようです。たしかにサイトのデータベースにクレジットカード情報を登録するのはセキュリティ上よろしくないですよね。
このとき登場するのが`payjp `になります。

# payjpの仕組み
まずpayjpとフリマアプリではどのような流れでクレジットカードの処理が行われているのかざっくりとイメージしましょう!
私はここを飛ばしてすぐコードを書き初めてため概念の理解に時間がかかりました。わかれば非常に単純でした。笑
以下の記事がとてもわかりやすく参考になります。
[Pay.jpの仕組みについて!](https://qiita.com/wacker8818/items/d050f1b5632a271ebda5)
セキュリティに加えて、payjpで発行されるトークンと顧

元記事を表示

商品出品画面を作る

# メルカリの商品出品画面を参考にコピーを作る
参考画面[メルカリ](https://www.mercari.com/jp/sell/)

使用する機能

– ActiveStorage(画像投稿)[リンク](https://qiita.com/m-kawakami/items/492f18473a4c31ca9c5f)
– ancestry(多階層カテゴリー)
– active_hash(静的データ作成)

##とりあえず出来たコード
“`haml:new.html.haml
.sell
%header.sell-header
= link_to root_path do
= image_tag ‘mercari_top_logo.svg’, alt: ‘mercari’, height: ’49’, width: ‘185’
-#メイン部分
%main
%section.sell-container
= form_with model: @item do |f|

-# 画像部分
.sell-c

元記事を表示

7つのアクション

今回は、コントローラで使用する7つのアクションについて紹介します!
アクションとは、ルーティングがリクエストを受け取った時に動くものです

アクション毎に行われる処理を分けて記述することによって、役割をわかりやすく分類化できます!

| アクション名 | どんなリクエストに対応して動く? |
| —- | —- |
| index | 一覧ページを表示する |
| new | 新規投稿ページを表示する |
| create | データの投稿を行う |
| show | 個別の詳細ページを表示する |
| edit | 投稿編集ページを表示する |
| update | データの編集を行う |
| destroy | データの削除を行う |

この7つのアクションは基本になる所なので、ぜひ覚えて活用できるようにしてみましょう^^!

元記事を表示

【Rails】アクセス制限を記述する手順と、その思考手順をまとめてみました

##はじめに
Railsを学習した直後のアウトプット時、いざアクセス制限機能を実装しようと試みた際に、何をどうしたらいいのか思い浮かばなかったのが悔しかったため
次に同じ轍を踏まないよう、自分用にアクセス制限の実装順序を整理してみました。

##まず、アクセス制限って「何を」実装する機能なのん?
主にWebアプリケーションにおいて**ログイン機能を実装した後**で
**ユーザーがログインしている場合と、ログインしていない場合**とで、使える機能を制限する機能。

##それじゃあ、「どうすれば」実装できるのか?
例えば
・**ユーザーがログインしている場合**で一つ条件式を記述し、制限用の処理を記述する。
・**ユーザーがログインしていない場合**でもう一つ条件式を書き、制限用の処理を記述する。

“`ruby
if #(ユーザーがログインしている場合の条件式)
redirect_to(“URL”) #制限用の処理
end
“`

 
##コードは「どこに」記述するん?
簡単な掲示板アプリ作成を例として、「ユーザーがログインしていない場合」のア

元記事を表示

[WIP]RuboCop規約一覧表

## 一覧

|区分 |規約 |Cop数 |
|:–|:–|:–|
|Bundler |Bundlerファイル |4 |
|Gemspec |gemspecファイル |4 |
|Layout |インデント、行端揃え、スペースの一貫性 |88 |
|Lint |曖昧性と潜在エラー |82 |
|Metrics |プロパティ |9 |
|Migration |rubocop.yml内のCop名 |1 |
|Naming |命名規則 |16 |
|Security |メソッド呼び出し、構造に潜むセキュリティホール |5 |
|Style |Ruby Style Guideに準拠したスタイルの一貫性 |172 |

## Bundler

|Cop名 |解析対象 |デフォルト |
|:–|:–|:–|
|[Bundler/DuplicatedGem](https://github.com/rubocop-hq/rubocop/blob/master/manual/cops_bundler.md#bundlerduplicatedgem) |Gemfile内のライブラリが重複していな

元記事を表示

Rails 投稿機能

Railsで投稿機能の作成です:point_up:
部分的な備忘録ですので分かりづらいと思います

##railsアプリケーション作成

“`
$ rails _5.2.3_ new sample_boad -d mysql
“`
###Gem追加
bundle installとbundle updateを実行

“`
gem ‘pry-rails’
gem ‘compass-rails’, ‘3.1.0’
gem ‘sprockets’, ‘3.7.2’
“`

##データベース作成

“`
$ rake db:create
“`

####モデル作成

“`
$ rails g model tweet
“`
####テーブル作成
マイグレーションファイルはテーブルの設計図のようなものです。
t.の後に続いている記述は、どんなデータが入るのかを示す型です。

srting 文字(少なめ)
text 文字(多め)
integer 数字
などがあります。

timespasはcreated_at(作成時間) や updated_at(更新時間) を定義する時に使用しま

元記事を表示

RailsでRSpecを追加しようとした時に発生したエラー「Could not find diff-lcs-1.3 in any of the sources Run `bundle install` to install missing gems.」の対処法

“`ruby:Gemfile
group :development, :test do
gem ‘rspec-rails’
end
“`
GemfileにRSpecを追加して、以下のコマンドを実行したらエラーが発生した。

## エラーメッセージ

“`sh
$ bundle install
・・・
$ rails generate rspec:install
Could not find diff-lcs-1.3 in any of the sources
Run `bundle install` to install missing gems.
“`

## 解決方法

“`sh
$ ps axu | grep spring
maiamea 53324 0.1 0.1 4336604 9524 ?? Ss 4:41PM 0:00.92 spring app | api-project | started 5 mins ago | development mode
maiamea

元記事を表示

rails 新規アプリ作成

# はじめに
今まで学習した知識を使って、オリジナルアプリを作るカリキュラムの段階まできました。
自身のアウトプット、皆さんへの共有の目的で、これから個人アプリが完成するまでの流れを投稿していきます。

## Railsで新規アプリを作成する

ターミナルにて

“`
$ rails _5.2.3_ new 〇〇 -d mysql
“`
を、実行する。

railsのあとの『_5.2.3_』はrailsのバーション指定。
〇〇は作成したいアプリ名。
-dはデータベースの意味。
私の場合、データベースはmysqlを使用したかったので、-dで指定しました。

作成するアプリのディレクトリへ入り、ターミナルにて

“`
rails db:create
“`

を実行してデータベースを作る。

ここでひとまずアプリの大枠は完成です。
試しに

ターミナルにて

“`
rails s
“`
でサーバーを立ち上げ、localhost:3000へアクセスすると

![rails_welcome.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

deviseでログイン機能を実装したものの、データベースへ書き込めない問題

##起きた問題
deviseにてユーザーのログイン機能やユーザー編集機能などを実装したが、ユーザー編集機能のページedit.html.erbにて入力した内容がうまくデータベースに反映されない。

具体的にいうと**nameのカラムだけなぜかdbに反映されなかった**ので、調べてみた。

schema.rbを見てもちゃんとカラムが追加されている。。。

##解決した方法とソース

まず、解決した方法は簡単で、application_controller.rbに以下のコードを追加するだけ。

“`ruby:application_controller.rb
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters # 「登録時(sign_up)」に許可するパラメータを追加 devi

元記事を表示

Heroku環境下のテーブル変更作業メモ

##前提条件と結論

migrateしてから立ち上げないとテーブルの変更を認識しないので気をつけようといいたいだけのメモです。
リスタートするだけでいいし、なんらかの理由で[Herokuでデプロイと同時にrake db:migrateを実行する](https://qiita.com/m_nakamura145/items/2eafb2dc9f8a459670b6)ことを選択しない場合の備忘録なので、[Release Phase](https://devcenter.heroku.com/articles/release-phase)が設定できている場合は読む必要はありません。

– Ruby on Rails
– Heroku Postgres
– `–app yourapps`は複数環境を持っている場合のお約束

##実際のコマンド

“`heroku
# 現在のheroku側のmigrate状況を確認、すべてupになっている
heroku rake db:migrate:status –app yourapps

# herokuにpushした状態で、再度確認。

元記事を表示

【Rspec・devise token auth】Rails APIアプリのRspecテストでユーザログイン・認証を実装する方法

Rspecテスト内で`devise token auth`をつかってユーザログイン・認証するのはどうするんだ!?
`Devise`のやり方はたくさんあるのですが`devise token auth`は探すのに苦労したので、私と同じ状況に陥っている方のためにこの記事を残しておきます。

## やりたいこと

下記の様に、`BooksController`に`create`メソッドがあり、`create`メソッドを実行するにはユーザが認証が必須(`authenticate_user!`)だとします。

“`ruby:books_controller.rb
class BooksController < ApplicationController before_action :authenticate_user! def create book = Book.new(book_params) if book.save render json: { status: 'SUCCESS', data: book } else

元記事を表示

[Rails]ActiveRecord Relationについて調べたことざっくりまとめた[初心者向け]

## はじめに
Railsを何気なくつかっていたのであまり意識していなかったですが、とても大事な役割をになっているActiveRecord Relationのことをふと思い出したのでまとめてみました??

## ActiveRecord Relationクラスとは

>クエリ(DBに指示する命令文)を生成するための条件を持っていて、必要に応じて適切なSQLクエリを生成・発行してくれるクラス。

ざっくりいうと、データーベースとRailsのやりとりを担ってくれているクラス。

データーベースに命令を出す時はデーターベースとのやりとりをするための言葉(SQL)が必要ですが、Railsで自分でSQLを記述することはないかなと思います。

しかし、データーベースからデータを取得したり保存したりできている、、、!
これはまさにActiveRecord Relationというクラスが存在しているからなのです、、、!

“`sql:SQL文の例
User Load (28.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORD

元記事を表示

コーディング未経験のPO/PdMのためのRails on Dockerハンズオン、Rails on Dockerハンズオン vol.12 – TDDでPost機能をコーディング part1 –

# はじめに
お待たせしました!第12回にしてやっとつぶやき機能を実装してまいります!ここではPost機能といいますね。

# 前回のソースコード
前回のソースコードはこちらに格納してます。今回のハンズオンからやりたい場合はこちらからダウンロードしてください。

– https://github.com/at946/rails_on_docker_handson/tree/vol.11

# どんなの実装するの?
最初に今回のゴールを見据えておきましょう。

## 画面遷移
![screen_transition_diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254216/46d148bc-7baf-4215-1229-a0d41d433464.png)
新たにポストページを作ります。
ポストページはポストを投稿するフォームと、今までのユーザー全員のポストが投稿日時降順で表示される機能を具備しています。
ポストページはサインイン済のユーザーしかアクセスできません。
ポストの投稿ユーザーを

元記事を表示

rails form_withでフォロー機能作成

#はじめに
今回はフォロー機能を作成します。railsチュートリアルではform_forを利用していましたが、今回はform_withを利用して作成します。
(題材は自分のポートフォリオです。Userモデルはある前提で進めます。)

###対象読者
railsチュートリアル終わったレベルくらいの人

###作成の流れ
1.relationshipモデルの作成
2.各モデルの関連付け、フォロー機能のメゾット作成
3.対応するコントローラーの作成
4.form_withを利用したフォローボタン作成
5.jsファイルの作成
6.フォロー機能の流れ

###今回のAjaxの流れ
①fomr_withで作成したフォロー/アンフォローボタンを押すとPost/deleteリクエストが送られる。

②対応するコントローラのcreate/destroyアクションを実行

③js.erbファイルをレンダリング

④Ajax対象範囲のフォロー/アンフォローボタンを非同期で切り替え

#1.relationshipモデルの作成
relationshipモデルの中身はこんな感じです。中間テーブルを作成し

元記事を表示

OTHERカテゴリの最新記事