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

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

Rails モデルを紐付ける「関連(Association)」

#関連(Associationとは)
データベース上の紐付けを前提にして、モデルクラス同士の紐付けを定義することができる。
これにより、オブジェクト指向に沿った方法で関連するデータにアクセスすることができるようになる。

“`models/user.rb
class User
has_many :tasks
end
“`
“`models/task.rb
class Task
belong_to :user
end
“`
Userが親分、Taskが子分のイメージ。一つのUserに対して多くのTaskがぶら下がっていることを定義している。
##何ができる?
この定義によってUserクラスのインスタンスに対しては、user.tasksといったメソッドで紐づいたTaskオブジェクトの一覧を得られることができる。

例) ログインしているユーザーのTaskデータの登録

“`task_controller.rb
def create
@task = current_user.tasks.new(task_params)
end
“`

元記事を表示

task_pramsメソッドとは

#task_paramsメソッドとは
登録アクションなどに使われるメソッド。
フォームからリクエストパラメータとして送られてきた情報の中から必要な情報だけを抜き取る役割がある。
悪意あるユーザーが有害なデータを送ってきた時に、不正なデータによって登録・更新されるのを防ぐことができる。

“`task_controller.rb
def create
task = Task.new(task_params)
task.save!
end

private

def task_params
params.require(:task).permit(:name, :description)
end
“`
(意味)
task_paramsメソッド: taskオブジェクトからnameとdescriptionを取得。
create: task_paramsを引数としてtaskインスタンスを作成。save!メソッドでデータベースに保存。

元記事を表示

掲示板アプリに空の投稿を出来ないように制限をかける

【開発環境】
macOS Catalina
バージョン 10.15.3
ruby 2.5.1
Rails 5.2.4.2
visual studio code

勉強用に掲示板アプリを作成したので、その際に行ったバリデーションを記載します。
#バリデーションを設定し、空の投稿を制限しよう
掲示板アプリなどで空の投稿が出来てしまうというのは望ましくありません。
それを防ぐためにバリデーションを設定する必要があります。

##バリデーションとは?
バリデーション(validate)とは、データをDBに保存する前に無効なデータが保存されないように制限する機能のことです。

バリデーションの基本的な書き方です。

“`
validates :カラム名(シンボルで指定),チェックの方法
“`
##投稿機能にバリデーションを設定する
今回作成した掲示板アプリの投稿(post)のカラムはタイトル(title)と内容(content)です。
この二つのカラムが空の場合投稿できないようにバリデーションを設定します。

バリデーションはデータをDBに保存する前に行うので、モデルに記載する必要があります

元記事を表示

【フリマアプリ】PAY.JPでのクレジットカード決済機能について(第4回) 〜コード全文〜

“`ruby:cards_controller.rb
class CardsController < ApplicationController require 'payjp' before_action :set_item, only: [:show,:pay] before_action :card_present,only:[:index,:destroy] before_action :take_card,only:[:show,:pay] before_action :set_api_key def index if @card.present? set_customer set_card_information end end def create if params['payjp-token'].blank? redirect_to action: "new" # トークンが取得出来てなければループ else user_id = c

元記事を表示

【フリマアプリ】PAY.JPでのクレジットカード決済機能について(第3回) 〜運用編(購入)〜

 某スクールにおいて、チーム開発で、フリーマーケットアプリを作成中であり、使用した技術について公開しています。
※初学者のため、ミスや認識違いが多々あると思いますがご了承ください。

# フリマアプリにおいて、PAY.JPを用いたクレジットカード決済機能を実装しました!!

前回記事 

今回の記事は運用編(購入)となります。

それでは、実際にPAY.JPを用いてクレジットカード機能を用いた購入ができるように実装して行きたいと思います。

##カード情報表示

825ca2a1a52d58d1bdafec6ab3d0b05f.png

「購入する」ボタンをクリックしたら、**cardsコントローラーのshow**アクションに遷移します。

0b757cba1d9c2</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>JavaScript</div>
<div class='tag-cloud-link'>Rails</div>
<div class='tag-cloud-link'>haml</div>
<div class='tag-cloud-link'>pay.jp</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/sho_U/items/64ca57b7a1f72bf7079f'>元記事を表示</a></div>
<h3 id=【フリマアプリ】PAY.JPでのクレジットカード決済機能について(第2回) 〜運用編(クレジットカード登録)〜

 某スクールにおいて、チーム開発で、フリーマーケットアプリを作成中であり、使用した技術について公開しています。
※初学者のため、ミスや認識違いが多々あると思いますがご了承ください。

# フリマアプリにおいて、PAY.JPを用いたクレジットカード決済機能を実装しました!!
|内容 | url |
|:—————–|——————:|:—————————–:|
| 第1回 |導入編 | https://qiita.com/sho_U/items/ee0831844a0afd6e976f|
| 第2回 |運用編(クレジットカード登録) | https://qiita.com/sho_U/items/0a127e6f0904e3e9132b |
| 第3回| 運用編(購入)|https://qiita.com/sho_U/items/64ca57b7a1f72bf7079f|

今回の記事は運用

元記事を表示

【フリマアプリ】PAY.JPでのクレジットカード決済機能について(第1回) 〜導入編〜

 某スクールにおいて、チーム開発で、フリーマーケットアプリを作成中であり、使用した技術について公開しています。
※初学者のため、ミスや認識違いが多々あると思いますがご了承ください。

# フリマアプリにおいて、PAY.JPを用いたクレジットカード決済機能を実装しました!!

|内容 | url |
|:—————–|——————:|:—————————–:|
| 第1回 |導入編 | https://qiita.com/sho_U/items/ee0831844a0afd6e976f|
| 第2回 |運用編(クレジットカード登録) | https://qiita.com/sho_U/items/0a127e6f0904e3e9132b |
| 第3回| 運用編(購入)|https://qiita.com/sho_U/items/64ca57b7a1f72bf7079f|

〜コード全文

元記事を表示

rake実行時の NameError: uninitialized constant Xxxxx の解決について

# 今回の問題
rakeタスクを実行して以下のようなエラーがでた。

ただしこのエラーが出て条件として、「**別プロジェクトからコピーで取ってきたrakeを実行**」して通常見ないエラーが出現した。

“`sh:rake実行後のエラー
rake aborted!
NameError: uninitialized constant AutoRakeTask
“`

# 解決
rakeのタスク名と一緒に`:environment`を付与することで解決した。

“`ruby:before
task :exec do
“`

から

“`ruby:after
task exec: :environment do
“`

へ変更したら、事象が解決した。

ちなみに、environmentについて調べた結果、以下の記事にたどり着いたが、記載されていたエラー文も同じものだった。
参考:[Rails における rake タスクの :environment について](https://qiita.com/FumiyaShibusawa/items/11035fc640bb36a615

元記事を表示

[Rails] has_secure_passwordについて

最近使う機会が増えてきたhas_secure_passwordについてまとめてみました。

***

“`
class User < ApplicationRecord . . . has_secure_password end ``` *** ##具体的なメリット 1.セキュアにハッシュ化したパスワードを、データベース内のpassword_digestという属性に保存できるようになる。 2.2つのペアの仮想的な属性 (passwordとpassword_confirmation) が使えるようになる。**また、存在性と値が一致するかどうかのバリデーションも追加される。** 3.authenticateメソッドが使えるようになる (引数の文字列がパスワードと一致するとUserオブジェクトを、間違っているとfalseを返すメソッド)。 *** ##has_secure_passwordを使うための条件 1.gemに'bcrypt'を追加する。 2.モデルにpassword_digest属性を追加する。 *** ##注意点 メリットの2つ目のバリデ

元記事を表示

~これまでの学習項目および参考にした教材~

~これまでの学習項目および参考にした教材~

【バックエンド言語】
・Ruby
 →プロを目指す人のためのRuby入門

・Ruby on Rails
 →Railsチュートリアル6版

・Rspec
 →Everyday Rails Rspecテスト入門

【フロントエンド言語】
・HTML/CSS
 →1冊ですべて身につくHTML&CSSとWEBデザイン

・Bootstrap
 →公式リファレンス

・Materialize
 →公式リファレンス

【その他】
・Docker
 →Dockerを利用した開発環境の構築方法を学ぼう!

・Git Hub
 →もう怖くないGit!チーム開発で必要なGitを完全マスター

元記事を表示

ビュー(erb,haml)でデバッグを行う

##やること
今回の記事では、表題の通りビューファイルの中でデバッグを行います。
erbとhamlではhtmlの中にRubyを書き込むことが出来るため、実はbinding.pryをかけることが出来ちゃいます。
これにより、ビューで使用する変数にどのような値が格納されているか分かるわけです!
やることはすごく簡単なことですが、意外と盲点となっており初学者では知らない人も多いと思います。

##早速やってみる
以下のようにerbで書かれたビューファイルがあったとします。
注目する点は2行目のbinding.pryです。
erbはビューファイル内にRubyのコードが書けるので、2行目で処理を止めることができます。

“`erb
<% @posts.each do |post| %>
<% binding.pry %>

Ruby on Rails ページ毎のタイトルを自動で切り替える方法

ページ毎にタイトルを変更する方法

ステップ1:ヘルパーにメソッドを定義する

今回はどこのページでも使いたいメソッドなので、ApplicationHelperに定義する

“`application_helper.rb
#application_helper.rb
module ApplicationHelper
def full_title(page_title=””)
base_title = “固定文”
if page_title.empty?
base_title
else
page_title + “【” + base_title + “】”
end
end
end
“`

ステップ2:ビューに表示れるようにメソッドを埋め込む

“`application.html.erb
<%= full_title(yield(:title)) %>
“`

ステップ3:各ビューで表示したいタイトルを埋め込む

`

元記事を表示

rails newでエラーが出た時に解決した話

rails new でアプリを新規作成する時に、以下の画像のようなエラーが出て困っていました。
[![Image from Gyazo](https://i.gyazo.com/2a40ea9dd71f91d038246a0d539272b7.png)](https://gyazo.com/2a40ea9dd71f91d038246a0d539272b7)

以下のコマンドで

“`
$ gem list rails versions
“`

それぞれのバージョンを確認
[![Image from Gyazo](https://i.gyazo.com/0b7b9417ceebc124bda22088b3aa21c5.png)](https://gyazo.com/0b7b9417ceebc124bda22088b3aa21c5)
原因としては、rails newでエラーが出る部分はrails6の機能になるので、railsのバージョンを指定してコマンドを入力する必要がありました。

“`
rails _5.2.4.1_ new アプリ名 -d mysql
“`
無事、rail

元記事を表示

elenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start: crashed.の対処法

## 開発環境
Ruby 2.5.1
Rails 6.0.2
ubuntu(WSL)

## 想定状況
ターミナルに`$ bundle exec rspec spec/system/tasks_spec.rb
`を入力すると以下のエラーが発生。

“`

Failures:

1) タスク管理機能 一覧表示機能 ユーザーAがログインしているとき ユーザーAが作成したタスクが表示される
Got 0 failures and 2 other errors:

1.1) Failure/Error: visit login_path

Selenium::WebDriver::Error::UnknownError:
unknown error: Chrome failed to start: crashed.
(unknown error: DevToolsActivePort file doesn’t exist)
(The process started fro

元記事を表示

【RSpec】authenticate_user!を使用したときのRSpecへの副作用をFactoryBotで解消する

#概要

Railsアプリのコントローラーで「authenticate_user!」を、
ログイン済みでないとアクセスしてほしくないアクションに設定しました。

そしてRSpecでコントローラーのテストを実施しようとした際に、
普通にアクションごとにテストコードを書くと「authenticate_user!」の影響でエラーになります。

それをFactoryBotを使って回避する方法を備忘録としてまとめます。

#Gemをインストール

group :development, :test do
gem ‘factory_bot_rails’
gem ‘rspec-rails’
end

#rails_helper.rbを編集

“` rails_helper.rb
RSpec.configure do |config|
config.include FactoryBot::Syntax::Methods
config.include Devise::TestHelpers, type: :controller
end
“`

#spec/factories/us

元記事を表示

DockerをつかってVueとRailsの開発環境にユーザー認証機能を実装する

GWの記事3投目です。
# 本記事の目的
[DockerをつかってVueとRailsの開発環境をつくる](https://qiita.com/harachan/items/4561d54948fe650cf611)の続編です。
前回環境を作ったところに、以下の機能を追加する
– ユーザーの新規登録
– ログイン機能
– Tokenの発行

# 手順
## サーバー側
### CORSの設定
cors設定に必要なものとついでに“`has_secure_password“`を使用するためのものをgemfileに記載

“`gemfile:server/Gemfile
# Gemfile
# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
gem ‘rack-cors’#28行目あたりのこの行のコメントアウトを外す
gem ‘bcrypt’, ‘~> 3.1.7’ #追記
“`
外したら保存して“`docker-compose run

元記事を表示

複数前のrollbackはもうしない

“`
rails db:migrate:status
“`
スクリーンショット 2020-05-05 17.52.19.png

“`
rails db:migrate:down VERSION=20200324161602
“`
スクリーンショット 2020-05-05 17.52.50.png

“`
rails db:migrate:status
“`
downになってる!

元記事を表示

Docker on Rails デモ ヤリマスヵ…

# はじめに
                 )
                 ( _
            , – ニ ̄   ̄ ` 、
           /               `ヽ
        , – ‘、      -=-  -=- ‘,_
       r´   ヽ.    γ  ̄ ヽ γ ̄ヽ ‘,ヽ.
      {      i=={ l    l.=l l   .} | i__  Docker デモ ヤリマスヵ…
.      i  < ̄`ヽ、 弋ゝ _ノ 弋ゝ ノ >´ , ィ´
      弋__ _> 、 ヽ、  ̄       ̄ / /ヽ
         |     ` ー`             }
         ゝ、                  /
           `ー -、 – ______ , ィ´
           /    l /   |>く| \ ハ
             /_   .l > .|:H:| く l ハ
           , ‐´  `ヽ、l /  .l:l l:l  l.l-‐

元記事を表示

RSpecとRuboCopの自動設定スクリプト

Rails ジェネレータと Thor を調べた副産物で作ってみた。

Railsチュートリアルの SampleApp で生成できたため、普通の Rails アプリケーションなら使用可能だと思う(実行環境: ruby:2.4.9, rails:5.1.2)。

### スクリプトファイルの生成
“`bash:bash
# プロジェクトのルートディレクトリからの操作を想定
$ touch rubocop_and_rspec_setting_script.rb
“`

### ファイルを編集
“`ruby:./rubocop_and_rspec_setting_script.rb
require “thor”
class Helper < Thor include Thor::Actions end helper = Helper.new # Application settings # -------------------------- application_rb = "class Application < Rails::Application\n" helper.i

元記事を表示

Rails 6でBootstrapをカスタマイズする

[Theming Bootstrap](https://getbootstrap.com/docs/4.4/getting-started/theming/#sass-options)に書かれているように、Bootstrap 4をカスタマイズ(テーミング)することができる。

# 環境
– Rails 6.0.0
– WebpackでBootstrap 4を管理
– SCSSを使用

# 手順
1. `app/assets/stylesheets` に `bootstrap-custum.scss`を作る
2. `app/assets/stylesheets/applications.scss` に下のように書く。

“`applications.scss
@import “bootstrap-custom”;
“`

3. 設定したい事項を書く。

“`bootstrap-custum.scss
$body-bg: red;

@import ‘bootstrap/scss/bootstrap’;
“`
**Import文はテーミング行の下に書く。**

# まとめ
これでカ

元記事を表示

OTHERカテゴリの最新記事