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

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

[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)
新たにポストページを作ります。
ポストページはポストを投稿するフォームと、今までのユーザー全員のポストが投稿日時降順で表示される機能を具備しています。
ポストページはサインイン済のユーザーしかアクセスできません。
ポストの投稿ユーザーを

元記事を表示

git pull時に 【Your local changes to the following files would be overwritten by merge】とエラー

#エラー内容

$ git pull origin masterをすると

“`error: Your local changes to the following files would be overwritten by merge:
config/routes.rb
Please commit your changes or stash them before you merge.“`

が出てくる。

#原因
pullした内容と自分の編集した箇所(ここではconfig/routes.rb)が被っている。

#解決策
pullした内容の箇所が自分も編集している所の為、mergeする前にcommitするかstashしてと言われる。

なので、今回はコミットを選択。

“`$ git push * “`
“`$ git commit -m “コミット名” “`
“`$ git push origin 自分の作業ブランチ “`

でpushし、Github上でコンフリクトが起きなければ再度、

“`$ git pull origin master “`

とpul

元記事を表示

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モデルの中身はこんな感じです。中間テーブルを作成し

元記事を表示

チャットアプリにAWSのS3(ストレージサービス)を導入

# チャットアプリにストレージサービスを導入します。

**進める上での注意点**

手順を間違えると悪用され、高額請求される可能性があります。

S3を使用する上でどうなると被害が出るのかというと
悪意を持ったユーザーにAWSのIDとパスワードが漏れてしまうことで被害が発生!

AWSは従量制のサービスのため、他人がなりすましでログインして膨大な処理を行うと、それに対する支払いが発生してしまう(^◇^;)

#### 今回は下記の3つの手段を取ります。

##二段階認証

##IAMユーザーの利用

##git-secrets

元記事を表示

Railsにユーザーフォロー機能を実装する

## 何をしたいのか.
– twitterに見られるような,あるユーザーが,あるユーザーをフォローするという機能を実装する時,DBのテーブルはどういった構成にしたらいいのか
– それをrailsで実現するにはどうしたらいいのか

を,このページ(https://umaweb1.hatenablog.com/entry/2019/10/26/120623) を参考にやってみて, 詳しく手順を書いたのが, 本記事である.

## それでは早速, 実装開始
– あるユーザーが, あるユーザーをフォローするのだから,userAテーブルとuserBテーブルが必要…なんだけど
– userテーブルは2つ作ると複雑になりそう…
– なので, userテーブルは1つなんだけど, その1つのテーブルにフォローする側のユーザーと, フォローされる側のユーザーの役割を持たせる!
– 一見難しそうだけど, 以下を読んでいけば大丈夫だと思います.

## テーブル構成を考える

– テーブルは2つ
– users テーブルと
– relationships テーブルを作成す

元記事を表示

[Rails備忘録]配列を平坦化させる Array#flatten

Railsの備忘録です。

“`Rails
Array#flatten

# 自身を再帰的に平坦化する例。
a = [1, [2, 3, [4], 5]]
p a.flatten #=> [1, 2, 3, 4, 5]
p a #=> [1, [2, 3, [4], 5]]
“`

##参考ページ
[Ruby 2.7.0 リファレンスマニュアル instance method Array#flatten
](https://docs.ruby-lang.org/ja/latest/method/Array/i/flatten.html)
[[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか
](https://qiita.com/jnchito/items/dedb3b889ab226933ccf)

元記事を表示

3/23 最終課題五日目

3/23
最終課題五日目
#メモです

できている商品詳細ページをgithubに
出してコードレビューをする

コンフリクトが起こっていたので
修正した後にコードレビューをしてもらう

aタグはlink_toで書きましょう。  
と指摘を頂いたので
修正
修正後無事にLGTMともらう

その後マージしてマスターにプッシュする
そして今まで作ったとこに変なところが無いかや修正があるか探す

とりあえず簡単な修正をしてコミットし
マスターにプッシュしました

これで商品詳細ページ(マークアップ)が終わったので次に進む

次はサーバーサイドに進むが
みんなで話し合った結果
先に商品出品のサーバーサイドを進めることに決定
2人で進めることになりました
画像のところとその他で別れることに決定

Git hubでブランチを作った後さらに
ブランチを作ることで二人で進めれるようにする
(孫ブランチ?)
子ブランチの状態で新しいブランチを作る
そうするとマスターブランチの小ブランチを作るか
小ブランチの孫ブランチを作るかと選択が出るので
孫の方を選択
作る際のブランチの名前は小ブランチの名前と一緒もし

元記事を表示

【Rails】ancestryで簡単に多階層型データの作成し呼び出す

#概要

・多階層型DB作成のためのgem “ancestry” の導入
・seeds.rbでのデータインプット効率化
・viewファイルへの表示

#階層型DB作成のためのgem “ancestry” の導入
###gemの導入

“`ruby:Gemfile
gem ‘ancestry’
“`

“`terminal:ターミナル
$ bundle install
$ rails g migration add_ancestry_to_category ancestry:string:index
$ rake db:migrate
“`
###モデルの設定
“`ruby:categories_controller.rb
class Category < ApplicationRecord has_many :items has_ancestry end ``` ```ruby:items_controller.rb class Item < ApplicationRecord belongs_to :category end ``` ###データ

元記事を表示

redisで特定のデータを一括で削除、操作をするスクリプト

# redisで有効期限が設定されていないセッションデータを一括削除するスクリプト
今回は有効期限が設定されていないデータを削除するscriptを作りました。

シンプルに検索して、eachして、ifでチェックして該当すれば削除を行ってます。

“`lua:session-delete.lua
redis.call(‘select’, ‘1’) –[[ DBの数字を選んでください ]]
local expresion = ‘session*’ –[[ 精査対象を正規表現で捉えてください ]]

local delete_count = 0
for _,session_key_id in ipairs(redis.call(‘keys’, expresion))
do
if redis.call(‘TTL’, session_key_id) == -1 then –[[ 有効期限が -1 (未設定)のものを削除します ]]
redis.call(‘DEL’, session_key_id)
delete_count = delete_count + 1
e

元記事を表示

【rails】seedデータからファイルを読み込んで、ファイル内のimageを一括で保存する

###railsのseedデータからファイルにあるイメージを一括で保存する方法を、説明します。

準備)
①carrierwaveを使います。
②db/imagesを作成します。

以下のコードでイメージを保存できます。

“`seeds.rb
Image.create!([
(1..20).map do |n|
[
id: n,
image: open(“#{Rails.root}/db/images/#{n}.jpg”)
]
end
])
“`
しかし、この場合、イメージ名を1.jpgとかにしないといけないから、めんどくさい。。。

なので、このコードで楽にいけます!

“`seeds.rb
images = Dir.open(“#{Rails.root}/db/images”)
images.each.with_index(-1) do |image, i|
next if image =~ /^\.+$/
Image.create!(
id: i,
name: image,
image:

元記事を表示

日時表示を日本時間に修正

##タイムゾーンの設定
application.rbに、タイムゾーンの設定を追記します。
【例】

“`application.rb
〜省略〜
# Initialize configuration defaults for originally generated Rails version.
config.time_zone = ‘Tokyo’ #追記

# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
# — all .rb files in that directory are automatically loaded after loading
# the framework and any gems in your application.
〜省略〜
“`

元記事を表示

ActiveRecord で unscoped を呼ぶとその前のクエリが消える

[ブログ記事](http://secret-garden.hatenablog.com/entry/2020/03/18/194551)からの転載です。

## `unscoped` を使うことで `default_scope` を取り除くことができる

さて、皆さん大好き `default_scope` ですが、モデルで `default_scope` を定義すると次のように暗黙的にクエリが追加されます。

“`ruby
class User < ActiveRecord::Base default_scope { order(:updated_at) } end # 暗黙的に ORDER BY のクエリが追加れる puts User.all.to_sql # => SELECT “users”.* FROM “users” ORDER BY “users”.”updated_at” ASC
puts User.where(name: “Tom”).to_sql
# => SELECT “users”.* FROM “users” WHERE “users”.”name”

元記事を表示

Ajaxとjbuilderの参考リファレンスなど

##Ajax
[【jQuery日本語リファレンス 】Ajax](http://semooh.jp/jquery/api/ajax/jQuery.ajax/options/)
Ajaxのリファレンスになります。オプションも含めて説明しています。
[【js STUDIO】$.ajax()](http://js.studio-kingdom.com/jquery/ajax/ajax)
オプションや動作を含めて説明されています。
[Ruby on RailsのAjax処理](https://qiita.com/ka215/items/dfa602f1ccc652cf2888)
RailsでのAjaxの流れを図解つきで説明されています。
##jbuilder
[【GitHub】jbuilder](https://github.com/rails/jbuilder)
jbuilderのドキュメントです。
[Rails4でJSONを作るならto_jsonよりjbuilder](https://llcc.hatenablog.com/entry/2015/03/07/103121)
jbuilderの

元記事を表示

Herokuへのデプロイ手順|Rails + MySQL

##はじめに
MySQLで作成したRailsアプリを、Herokuを使ってデプロイすることがあったので備忘録としてまとめました。同じ環境で初めてデプロイする方の参考になれば幸いです。

##自分の環境
– macOS 10.15.3
– DB: MySQL
– Rails 5.0.7

##Railsアプリケーションの作成
###・アプリ作成 [現在作成中]
###・Gemfile修正
`sqlite3`が入っている場合は、以下のようにしてproduction環境下で反映されないようにしましょう。

“`ruby:Gemfile.rb
group :development, :test do
gem ‘sqlite3’, ‘~> 1.4’
end
“`
下記`mysql2`を追加。

“`ruby:Gemfile.rb
gem ‘mysql2’
“`
###・config/environments/production.rbの設定

Heroku上の本番環境でHTMLにCSSやJavaScriptが反映されるように、以下の記述を書き換えます。

“`:ターミナル

元記事を表示

ツイッター風Railsアプリをテストする(統合テスト編)

# この記事の基本的な方針
今回は別記事、[ツイッター風Railsアプリ最短復習(忙しい人の流し読みで開発シリーズ)](https://qiita.com/annaPanda8170/items/844684cb739f99d3f114)で作ったアプリの統合テストをします。

手を動かしながら読みたいようでしたら、以下でこのツイッター風Railsアプリを手に入れてください。

“`bash:Terminal
$ git clone https://github.com/annaPanda8170/cheaptweet.git
$ bundle install
$ bundle exec rake db:create
$ bundle exec rake db:migrate
“`
基本解説はしません。手順のみ示します。
# 想定する読み手
既に一度Railsアプリをチュートリアルやスクール等で作ったことがある方を想定しております。
Mac使用で、パソコンの環境構築は完了していることが前提です。
# 具体的な手順
[完成品GitHub](https://github.com/anna

元記事を表示

Rails2.7 Rails6 Docker React環境でシンプルCRUD実装

streampackのminsuです。
[以前の記事](https://qiita.com/minsu/items/0ccbafff460e72b13d44)で Docker + Rails + React の環境構築を行いindexページの表示まで行ったのでCRUD機能を追加します。
ですが期間も空いているため、折角なので以前の環境である

– Rails 5.1.4
– Ruby 2.4.1
– mysql 5.7

ではなく、新しい環境で作り直します。

最新版確認
https://rubygems.org/gems/rails
https://www.ruby-lang.org/ja/downloads/

### 作成環境
– Rails 6.0.2
– Ruby 2.7
– mysql 5.7

## ファイルの用意
`Gemfile` `Gemfile.lock` `Dockerfile` `docker-compose.yml` を作成します。

“`:Gemfile
source “https://rubygems.org”
gem “rails”, “6.0.2”

元記事を表示

headerとflashの間にできた謎の余白を消す(Devise, Bootstrap)

#はじめに
先日投稿した[こちら](https://qiita.com/Roy1473/items/b7e6eede261c63ea9216)で
Bootstrap + jQueryを使ってFlashなどの
``をクリックした時にFlashを閉じる機能を実装しました。
ただ、ブラウザ場で確認すると、
Flashが消える前、後、双方で

との間に余白がないようにぴったり合わしているにも関わらず
`

`と`flash`の間に余白が発生していました。

この余白を無くすことができたので紹介します。

#開発環境
– bootstrap-sass (3.3.7)
– devise (4.7.1)
– jquery-rails (4.3.1)
– rails (5.2.4.1)

#前置き (layoutのデザイン)

“`html:header.html

元記事を表示

ユーザーの状態によって表示を変更する方法 Rails

#初めに

Rubyのライブラリの1つである、便利機能のdeviseを使いました

—————————————–

##devise

ログイン機能の実装を簡単にしてくれるgemです

#本題

今回は、ログインしているかしていないかで見せ方を変更したかったので、、、

“`
– if user_signed_in?
.purchase
= link_to ‘購入ページ’,’#’
– else
%p.setumei 親譲りの無鉄砲で小供の時から損ばかりしている。小学校に居る時分学校の二階から飛び降りて一週間ほど腰を抜かした事がある。なぜそんな無闇をしたと聞く人があるかも知れぬ。別段深い理由でもない。新築の二階から首を出していたら、同級生の一人が冗談に、いくら威張っても、そこから飛び降りる事は出来まい。弱虫やーい。と囃したからである。小使に負ぶさって帰って来た時、おやじが大きな眼をして二階ぐらいから飛び降りて腰
“`

と記述しました。

#ログインしている

PHP サイト でも Capistrano (Ruby Gem)

## 環境

* Ruby 2.6.5

## 設定手順

### Capistrano 設定ファイルの用意

“`sh
bundle add capistrano
bundle exec cap install
“`

これで必要なファイルが作成されます。

あとは `deploy.rb`, `config/deploy/*` を変更して設定完了です。

ファイルを置けば使えるPHPサイトなら、認証設定程度を記述すればOKです。

### 設定ファイル例

“`ruby:staging.rb/production.rb
# server configuration
role :web, %w{ec2-user@123.123.123.123}
# file location
set :deploy_to, “/var/www/xxx”
“`

“`ruby:deploy.rb
# application name
set :application, “xxxxxx”
# repository
set :repo_url, “sample@sample.git.jp:/sa

元記事を表示

OTHERカテゴリの最新記事