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

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

[Rails]joinsについて

仕様をすごく勘違いしてたのでメモに残しておく。

“`
テーブルBがテーブルAに所属している(Bがa_idというカラムを持つ)ならば、
A.joins(:bs).select(“as.*, bs.*”)
=>a_idで紐付いた一つの大きなテーブルができる
“`

と思っていたが、違う・・・

“`
モデルの定義で、
A has_many: bs
B belongs_to: a

という関係ならば、

A.joins(:bs).select(“as.*, bs.*”)
または
B.joins(:a).select(“as.*, bs.*”)
=>A.id = B.a_idで紐付いた一つの大きなテーブルができる
※joinsの引数の複数形、単数形に注意。モデルの定義を参照。

“`
って感じなんすね。
逆でもいけるんだね。

元記事を表示

Ruby on Rails6 実践ガイド cp16~cp18 【メモ】

## はじめに
この記事の筆者はプログラミングを学習し始めたばかりの初心者です。間違いがあれば指摘していただけると幸いです。

## 概要
この記事は[Ruby on Rails6 実践ガイド](https://book.impress.co.jp/books/1118101134)を読んで学んだことを自分用のメモとして記録したものです。抜粋してピックアップするので読みづらいと思われます。すいません。
この本には、続編の[機能拡張編](https://book.impress.co.jp/books/1118101135)もあり、記事を書いている段階で二冊とも学習を終えています。復習もかねて記事を書いていくつもりです。
18のチャプターに分かれているので、見出しごとに区切っていきます。

前の記事
[Ruby on Rails6 実践ガイド cp4~cp6 【メモ】](https://qiita.com/nizi24/items/aca9a745ccda08081eeb)
[Ruby on Rails6 実践ガイド cp7~cp9 【メモ】](https://qiita.com/niz

元記事を表示

railsで「rails-ujs」を使った非同期通信

## 実装イメージ

![タイトルなし.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72869/10d26b96-1ecf-fd62-7035-6e7d3e2c5246.gif)

「こんにちは」ボタンを押すと「上のボタンを押すとメッセージが変わるよ!」のところが「こんにちは」に
「こんばんは」を押すと「こんばんは」にページ遷移せず変わります。

## さくっとコード

装飾のコードは抜いています。

“`ruby:config/routes.rb
Rails.application.routes.draw do
get ‘/example’, to: ‘example#index’
post ‘/example/greet’, to: ‘example#greet’
end
“`

“`ruby:app/controllers/example_controller.rb
class ExampleController < ApplicationController layout

元記事を表示

rails-tutorial拡張編(userとmicropostの検索機能)

#userの検索機能を作るぞ

まずはransackというgemをbundle installする。

次にユーザー検索用のフォームのパーシャルを作成する。

“`app/views/users/_search_form.html.erb
<%= search_form_for @q do |f| %>
<%= f.label :name_cont, 'User Search' %>

<%= f.text_field :name_cont, placeholder: "Enter username...", class: 'form-control' %>

<%= f.submit 'Go', class: "btn btn-primary" %>

<% end %>
“`

このパーシャルを後ほどuserのindexアクションのviewに埋め込む

元記事を表示

rails-tutorial第14章

#ユーザーをフォローする

まずはRelationshipモデルを作っていこう

$ rails generate model Relationship follower_id:integer followed_id:integer

作成されたマイグレーションファイルにインデックスを書き足していく。

“`db/migrate/[timestamp]_create_relationships.rb
class CreateRelationships < ActiveRecord::Migration[5.0] def change create_table :relationships do |t| t.integer :follower_id t.integer :followed_id t.timestamps end add_index :relationships, :follower_id add_index :relationships, :followed_id add_index :

元記事を表示

【初心者向け】railsを使ってコントローラーの作成する手順

ドットインストールでrailsのコントローラーの作成方法について勉強したのでまとめておきます。

この記事はこんな人におすすめ

  • プログラミング学習を始めたての人
  • ドットインストールでプログラミング学習をしている人
  • railsでのアプリケーションの作成方法について復習したい人

と書きましたが、自分の復習用というのが裏の目的なのでところどころ言葉遣いなど伝わりにくい箇所などあるかもしれません。正しい情報をお伝えするように心がけますのでなにか気になる点がございましたらご指摘いただければと思います。

前提条件

  • rails newでアプリケーションを作成済み
  • 作成したアプリケーションのディレクトリでrails sでサーバーを立ち上げ

ここまでは先にやっておく必要があります。

コントローラーの作成

“`
rails g controller posts #postsはコントローラー名
“`
これでうま

元記事を表示

【Rails】link_toメソッドで指定したviewファイルに飛ぶ方法

## link_toメソッドの書き方▼
“`
= link_to root_path, HTTPメソッド名 クラス名 do
“`
で記述。(上記記載はroot_pathを用いた場合)

## root_pathの調べ方▼
ターミナルにて**`rake routes`**を実行。(rails routesでも可)
そうすると下記のような情報が表示される。

“`
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) d

元記事を表示

attr_accessorが必要な理由と、不要な理由(Railsさんありがとう): Railsチュートリアル備忘録 – 9章

以前にも出てきた`attr_accessor`
あまり理解できていなかったので調べてみた

##理解したこと
– `attr_accessor`の役割
– `attr_accessor`を意識せずにここまでこれた理由(Railsさんありがとう)

##躓いたのはこれ
2行読んで続きを放棄したくなった

>Userモデルには既にremember_digest属性が追加されていますが、remember_token属性はまだ追加されていません。このためuser.remember_tokenメソッドを使ってトークンにアクセスできるようにし、かつ、トークンをデータベースに保存せずに実装する必要があります。そこで、6.3で行ったパスワードの実装と同様の手法でこれを解決します。あのときは仮想のpassword属性と、データベース上にあるセキュアなpassword_digest属性の2つを使いました。仮想のpassword属性はhas_secure_passwordメソッドで自動的に作成されましたが、今回はremember_tokenのコードを自分で書く必要があります。これを実装するため、4.4.

元記事を表示

Railsの使い方

# プログラミングの勉強日記
2020年6月8日 Progate Lv.85
授業での課題でRailsを使った

##昇順降順の並び替え
 データを昇順(asc:小さい順)、降順(desc:大きい順)に並べるときには`order`を使う。

“`ruby
books = Book.order(“id”: “asc”) #idを昇順に並べる
books = Book.order(“id”: “desc”) #idを降順に並べる
“`

##取得する数を指定する
 取得する値の上限を指定するには、`limit`を使う。

“`ruby
books = Book.limit(100).order(“id”: “desc”) #100個まで値を取得する
“`
例のように`order`は`limit`とドット(`.`)を使うことで、1行で記述できる。

##すべての数を取得する
 limitとは反対にすべての値を取得するときには`all`を使う。

“`ruby
books = Book.all
“`

##欲しい値を取得する
 テーブル内の条件に一致した値を取得するためには`

元記事を表示

【Rails】コメント機能の実装手順メモ

## 始めに
投稿に対してコメントできる機能に関する備忘録です
## 前提
__環境__
 Ruby 2.6系
 Rails 5.2系

__ライブラリ__
 devise
 Slim

__上記環境のRailsアプリ雛形__
 [Railsアプリケーションセットアップして、deviseとSlimを導入する手順](https://qiita.com/kurawo___D/items/5fad1e08ae29c0bc5a45)

__↓コメント機能の実装後イメージ↓__
![ezgif.com-video-to-gif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606750/5ebbc9cc-2edb-c022-0080-4ad21c87d244.gif)

## 実装

###1.モデル設計
![スクリーンショット 2020-06-09 21.23.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606

元記事を表示

routes.rbのcollectionとmemberについて詳しく学習

##そもそもcollectionやmemberってどんなときに使うか?
**[結論]**
「resourcesでroutingを設定しているとき、resourcesメソッドでは`自動で生成されない`actionへの
ルーティングを設定するとき」に使用する。

通常RailsのWebアプリケーションの中でルーティングを設定する際には7つのアクションを
自動生成してくれる`resources`メソッドを使用することが多いが、例えば投稿検索機能などを新たに追加で実装する際にはresourcesで設定できる7つのアクション以外にルーティングを生成しなければならない。そこでこういった場合に`collection`や`member`を使用する。

##それではcollectionとmemberにはどんな違いがあるか?
**[結論]**
ルーティングを設定する際に**「:id」を含ませるかどうか**の違い。

|||
|:———|:———————|
|collection|ルーティングに「:id」がつかない|
|member |ルーティングに「:id」が

元記事を表示

Precompiling assets failed. エラー

Precompiling assets failed.
のエラー。

production.rb

config.assets.js_compressor = :Uglifier
の部分を
config.assets.js_compressor = Uglifier.new(harmony: true)
に変更。

いつも通りgit addとgit commitすると問題なく通った。

元記事を表示

Rails RoutingErrorを捕捉する

#RoutingErrorを捕捉する

この記事は以下の記事の続きとなります[Railsでエラー画面を作ろう](https://qiita.com/akilax/items/e59e58c0c1f70c7fe96e)

クラスメソッドrescue_fromはアクションで発生した例外を捕捉するためのものなので、ルーティングの段階で発生するための処理は捕捉できません

ということでconfig/initializersディレクトリのファイルを作成する必要があります。

request.path_infoの値によって呼び出すアクションを振り分けています。

404 => not_foundアクション
422 => unprocessable_entity
それ以外 => internal_server_error

その後ErrorsControllerにactionを引数として渡して呼び出しています。

“`exceptions_app.rb
Rails.application.configure do
config.exceptions_app = ->(env) do

元記事を表示

【Rails】日本人最長の苗字 (バリデーション)

# 日本人最長の苗字(バリデーション)

### 目次
1. 日本で最長の苗字を調べるにあたって
2. 日本人最長の苗字
3. バリデーション設定

## 1. 日本で最長の苗字を調べるにあたって
カスタマー用のお問い合わせフォームの作成していました。
フロント側の実装が完了し、バックエンドでのバリデーションの実装に取り掛かりました。
お問い合わせフォームの項目に必ずしもある **苗字・名前** のバリデーションの最大値を決める際に手が止まりました..
**苗字・名前** の最大値なら15文字くらいで大丈夫かな?(なんかモヤモヤする)

..ていうか調べれば、解決できそう!
日本人最長の**苗字・名前** について調べました。

## 2. 日本人最長の苗字
日本人最長の **苗字・名前** について調べたところ、
苗字の最長は **5文字** (漢字)、読みでは **8文字** あるということがわかりました。

####下記のサイトを参考
https://name.sijisuru.com/Columns/longname

## 3. バリデーション設定
苗字の最長がわかった

元記事を表示

現役消防士によるポートフォリオ

##はじめに
ご覧いただきありがとうございます。

こんにちはむらかみです。
現在、27歳で大阪の消防士として勤務しています。

コロナ期間中は、リモートという最先端な働き方とはうらはらにしっかり消防署で勤務をしておりました。コロナ期間中は救急件数もいつも以上に少なく、やればできるね救急車の適正利用ということを肌でひしひしと感じる日々を過ごしました。(最近はまた増えてる)

そんな中、約1ヶ月の開発期間を経て、Webサービスをデプロイできたので、今回はなぜ僕がこのサービスを作ろうと思ったのか、どんな背景があるのか、そもそもプログラミングを初めたきっかけなどを記録として残しておこうと思い執筆しました!
ぜひ最後まで読んでいただけると嬉しいです。

##自分の状況
まず前提として、自分の現時点の状況を書き留めておこうと思います。

・現在、消防士として勤務
・スタート時は、HTML?CSS?という状態
・学習期間は5ヶ月程、その内開発期間1ヶ月程
・独学(4月からSlackのRubyコミュニティに参加)

##今回つくったもの

サービス名:「FIREノート」
https://www.f

元記事を表示

RailsでTailwind CSSを使用する

# はじめに
Rails に Tailwind CSS を導入する方法です。

# 環境
– rails : 6.0.3.1
– webpakcer : 4.2.2
– tailwindcss : 1.4.6

## Tailwind CSS のインストール

“`bash:Terminal
$ yarn add tailwindcss
“`

## tailwind.config.js の作成

“`bash:Terminal
$ yarn tailwindcss init
“`

## Tailwind CSS を読み込む CSS ファイルを作成

“`css:app/javascript/css/tailwindcss.css
@import “tailwindcss/base”;
@import “tailwindcss/components”;
@import “tailwindcss/utilities”;
“`

“`javascript:app/javascript/packs/application.js
// 追加
import ‘../css/tai

元記事を表示

Rails アプリ起動時のMysqlエラー を解消 (Mysql2::Error::ConnectionError ・ Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’)

# 何をしようとして起きたエラーか?
自分で開発した Ruby on Rails のアプリを異なる開発環境で GitHubからソースコードをコピー(git clone)し、起動させようとしたところ Mysql エラーが起きた。

# エラー内容
git clone した後、`rails s` でアプリを起動しようと試みる。
しかし、このようなエラーがでる。↓↓
スクリーンショット 2020-06-09 18.26.42.png

「DBを作成してないからだ!」と思い、

rails db:create

を実行するも `rails s` と同じような内容でエラー↓↓
スクリーンショット 2020-06-09 18.28.45.pngattr(‘action’)を遷移先にする仕組み

ajax通信での非同期通信の復習している最中、そういえばと目に止まったのがactionで遷移先を指定している以下のjsコード記述

““
※投稿ボタンを押した際、ajax通信を行う部分の抜粋

let url = $(this).attr(‘action’);
$.ajax({
url: url,
type: “POST”,
data: formData,
dataType:’json’,
processData: false,
contentType: false
})
““

注目して頂きたいのが

““
let url = $(this).attr(‘action’);
““

と言う箇所。
遷移先の変数を定義している部分なのですが、引っかかったのはattr(‘action’)。
actionで遷移先指定できちゃうの・・・?どういう理屈で・・・?(震え声)

そんなこんなで好奇心に駆られて気づけばあれこれと調べていたのです。

さてここでattrについておさらいしていき

元記事を表示

[Rails]多階層カテゴリーから商品を検索・一覧表示する機能

# 概要
以下の画像のように、選択したカテゴリーに所属する商品を一覧表示する機能です。
カテゴリーは多階層になっていて、下の階層に行くほど絞り込んだ検索が出来るようになります。
カテゴリーはgemのancestryを用いて作成しています。
![d3a7f46ab307f384f41fe88f3917826b.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619967/295b0c70-83ac-bcf6-f87e-5c683a855121.gif)

# 前提
・ancestryを用いてカテゴリーテーブルを作成している。
・カテゴリー:商品 = 1:多の関係になっている。
・商品モデルのcategory_idには、最下層のカテゴリーidが登録されている。

この記事のアプリでは3階層のカテゴリーを使用しています。
また、この記事内では一番上のカテゴリーを「親カテゴリー」、その下の階層を「子カテゴリー」、
そのまた下を「孫カテゴリー」と表現しています。

# 参考記事
ancestryの導入方法については

元記事を表示

【Rails】DB Browser for SQLiteを使ってテーブルのデータを表示/修正/追加/削除する

Railsチュートリアルでも紹介されていますが、アプリケーションを作成している際に便利なDB Browser for SQLiteの主な機能を記載します。複数モデルが絡むアプリケーションを実装している時、中間テーブルはどういう状況なの!?となった時にDB Browser for SQLiteでテーブルの中身を確認すると分かりやすいのでおすすめです。

# DB Browser for SQLiteとは

SQLiteのデータベースをGUIで管理することができるツールです。作ったテーブルの中身を一目で確認することができ、データの表示だけでなく、修正/追加/削除できるので便利です。

# ダウンロード方法

https://sqlitebrowser.org

上記のURLからダウンロードできます。
![DB_Browser_for_SQLite.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642283/9f731437-ae6b-7fdd-84dd-fea29d7a0699.png)

元記事を表示

OTHERカテゴリの最新記事