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

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

任意の3つの数字を、同じ値を除外して合計を出力する方法

【概要】
—————————————-
1.結論

2.どのようにコーディングするのか

1.結論
—————————————-
配列、eachメソッド、if文を使う!

2.どのようにコーディングするのか
—————————————-

“`ruby
def any_three_sum(array)
unique_nums = [] #—❶
array.each do |num| #—❷
count = 0
array.each do |i| #—❸
if num == i
count += 1
end
end
if count < 2 #---❹ unique_nums << num end end three_sum = 0 #---❺ u

元記事を表示

【No.004】発注者の注文一覧画面を修正

[Issue](https://github.com/fukadashigeru/import_agent_app/issues/9)
[PR](https://github.com/fukadashigeru/import_agent_app/pull/10)

# 概要
発注者の注文一覧画面を修正する

# ToDoリスト
– [x] ステータスのenum化
– [x] 編集ボタンをfontawsomeに
– [x] 横幅が狭い時に横スクロールを可能に

# ToDo詳細
## ステータスのenum化

[Rails 国際化 (i18n) API](https://railsguides.jp/i18n.html)
[[初学者]Railsのi18nによる日本語化対応](https://qiita.com/shimadama/items/7e5c3d75c9a9f51abdd5)
[Railsでi18nを使った日本語化をする](https://qiita.com/rearail/items/5554fab137ef8635a1af)

“`ruby:config/applicati

元記事を表示

【No.003】発注者の注文一覧画面を作る

[Issue](https://github.com/fukadashigeru/import_agent_app/issues/7)
[PR](https://github.com/fukadashigeru/import_agent_app/pull/8)

# 概要
発注者の管理画面をつくる

# ToDoリスト
– [x] Order::OrderingOrgSidesController追加
– [x] routes.rbをいい感じに
– [x] Orderモデル追加
– [x] Orderのレコードを作成する内容をseedに追加
– [x] Slimの導入
– [x] TailWindの導入
– [x] 見た目をFigmaに近づける

# ToDo詳細
## Order::OrderingOrgSidesController追加

ターミナルで下記をたたく。

“`
bin/rails g controller order::ordering_sides
“`

app/controllers/orders/ordering_org_sides_controller.r

元記事を表示

初見で難解だったdeviseを改めてまとめてみた

##はじめに
 deviseとの出逢いは最悪でした。そもそもGemという概念すら曖昧で、MVCモデルの流れが少しわかるようになってきた段階でインストールした記憶がある。deviseでは、基本的にコントローラーを触らないので、初見ではなぜ勝手にアクションが実行されているのかが理解できなかった。なので、改めて「これだけ!」というものをまとめた次第。

#deviseとは
 deviseはユーザー管理機能のに特化したGem。サインインやログアウトなどの設定が簡単になる。つまり、手動でルーティングの設定やコントローラー…をしなくて済む。ユーザー登録をしてサービスが受けられるアプリケーションなら、導入すると、開発が早くなるというメリットがある。

##全体の流れ
1. Gemfileに追加
1. deviseをインストール
1. モデルの作成
1. テーブルの作成
1. 新規登録とログインのためのリンク設定
1. 新規登録のためのビューファイルの作成

今回は新規登録のみを扱う。

###1. Gemfileに追加
“`ruby:Gemfile
gem ‘devise’
“`
・ファイルの最

元記事を表示

RailsにおけるCRUD機能とMVC

## はじめに
初学者のアウトプット用記事です。
ご指摘していただけると幸いです。

## CRUD機能とは?
システムに必要な4つの主要機能である「Create(生成)」「Read(読み取り)」「Update(更新)」「Delete(削除)」の頭文字を並べた用語

データを操作する際に必要な最低限の機能

・生成機能(Create)
・読み込み機能(Read)
・変更機能(Update)
・削除機能(Delete)

## MVCとは?
UI(ユーザーインターフェース)を持つアプリケーションソフトウェアを実装するためのデザインパターンの一つ。
簡単に説明すると、自分が指定したページ(URL)はブラウザに表示されるまでに、ルーティング→コントローラー(C)→モデル(M)→ビュー(V)という順で処理が行われている。モデルは必要な時にだけ処理がされるため、必要でない時はとばす。
*Model(データ) View(画面) Controller(操作)

## MVCなぜできた?
アプリを色々処理する中で画面(UI)の部分とデータを処理する部分で性質が違うのでその2つを一緒にコードを書いてし

元記事を表示

Ruby On Rails でデータベースを紐付ける手順

#モデルの設定
サンプルは“`1対多数“`
###1側

“`post.rb
class Post < ApplicationRecord has_many :comments end ``` ###多側 ```comment.rb class Post < ApplicationRecord belongs_to :post end ``` #ルーティングの設定 ```routes.rb resources :posts do resources :comments end ``` ※createとdestroyのみ使用する場合、下記の記述で他のルーティングにアクセス制限をかけることができる。 ```routes.rb resources :posts do resources :comments, only: [:create, :destroy] end ``` #フォームでのパラメーターの受け取り方 [ ]で囲う。 ```???.html.rb <%= form_for [@post, @post.comments.build] do |f

元記事を表示

railsでのカラム名追加時に発生したエラーについて(rails db:migrate、rails db:rollback、add)

#目次

1.概要
2.原因
3.解決
4.反省
5.まとめ

#1.概要
ItemsテーブルとUsersテーブルの2つが存在し、最初に作ったItemsテーブルにuser-idのカラムを追加する為、`rails db:rollback`を2回実行した後に、`rails db:migrate`を実行したところ、マイグレートキャンセル:外部キーが存在しない、ユーザーSQLが存在しないというエラーが発生しました。(本来はaddを使いカラムを追加すべきでした。)

#2.原因
Usersテーブルを作成前に、Itemsテーブルを暫定的に作成していた為、Itemテーブルに紐付けたuser-idが存在しないというエラーが発生しました。

たとえば1つ目のItemsテーブルは**9月1日時点**で作成したとします。

“`ruby
class CreateItems < ActiveRecord::Migration[6.0] def change create_table :items do |t| t.references :user, foreign_k

元記事を表示

accepts_nested_attributes_forで関連モデルの更新をする方法

### やりたいこと
accepts_nested_attributes_forを使い関連モデルの作成、更新も同時にやっている。

作成のタイミングで関連モデルだけは更新したいケースがあった。

### やりかた
https://github.com/rails/rails/issues/7256#issuecomment-93172189
を自分用にかみ砕いてメモしたものです。

Foo (既存の更新) -> Bar (作成) -> Baz (既存の更新)
・Fooは更新
・Barは作成
・Bazは更新
をしたい。

その場合は以下のようにparamsを渡すだけでよい。

“`json
{
foo: {
id: “foo_id”, => fooを更新するにはidを渡す

bar_attributes: {

baz_id: “baz_id”, => bazを更新するにはbaz_idと
baz_attributes: {
id: “baz_id”, => idを渡す。

元記事を表示

Yay! I’m on Rails! Repetition

# はじめに
n回目の`Ruby on Rails`記念です。
# on Rails!
![20200930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/c50bbf37-c37d-9f06-a50e-c662f7e58494.png)
# 環境
“`ubuntu.bash
$ uname -a
Linux ubuntu 5.4.0-48-generic #52-Ubuntu SMP Thu Sep 10 10:58:49 UTC 2020 x86_64 X86_64 X86_64 GNU/Linux
“`
今回は、
`windows10`上の`VirtualBox`上の`Ubuntu`
# 嵌ったところ
例によって`sqlite`で引っ掛かりますが、前回経験済みですので大丈夫。
*[前回 – Qiita](https://qiita.com/superrino130/items/ad5179e825c23204db2f)*

## spring
“`spring.not
bund

元記事を表示

rails初心者が使用したコードのおさらい

#はじめに
progateとドットインストールで`rails`の学習を行い、使用したコードの説明をしてみました。
学習の効率を向上させるためのアウトプットとしての活用なので、間違いがあればご指摘いただけると嬉しいです。

#使用したコードと説明
##コマンドライン
“`
$ rails new myblog
“`
アプリケーションを作成する。

“`
$ rails g model Post title:string body:text
“`
モデルとテーブルを作成する。
モデルとは、データベースとのやり取りを行うクラスのこと。
`string`は文字列、`text`は長い文字列を作成する。

“`
$ rails db:migrate
“`
データベースに変更を反映させる

“`
$ rails g controller Posts
“`
`controller`を作成する。
`controller`:ブラウザからリクエストを受け取り、model・viewとのやり取りをする役割を持つ。

“`
$ rails routes
“`
設定されているルーティングの内

元記事を表示

Webpackerを使ってRailsアプリにjQueryを導入する方法

## 想定
プログラミンをはじめたてで、初めてjQueryを導入する際、「jQueryをgemでインストールします。jsファイルはアセットパイプラインを使って”pack-tag”を”inculude-tag”にして読み込みます。」と習った。その後、rails6からはwebpacker(webpackを導入するgem)が標準で搭載され、アセットパイプラインでの導入は一般的でないと聞き、webpackerでjQueryを導入したくなった。

## 環境
ruby 2.6.5
rails 6.0.3.2

## 導入方法
### アプリのインストール
アプリケーションを作成して、ターミナルで作成したアプリケーションに移動した状態にします。ローカルサーバーも立ち上げておきます。

### jQueryを入れる
ターミナルで次のコマンドを打ちます。

“`:terminal
$ yarn add jquery
“`

### 設定

ファイルの中身を以下のように、コードを追記します。

“`ruby:config/webpack/environment.js
const { environ

元記事を表示

ユーザーマイページを作ったらdeviseのユーザー編集機能がおかしくなった

# 概要
deviseを使ってユーザー管理機能を実装していたアプリで、マイページを作ったら編集ページが表示されなくなった。

#### 環境
Rails 6.0.0
Ruby 2.6.5

## 原因
ルーティングの表示の順番が原因で、ユーザー編集ページが意図通り表示されていなかった。
マイページのURIは`users/(user.id)`で、編集ページは`users/edit`の設定。

paramsを確認したところ `”id”=>”edit”`と記載があり、
なぜかeditをuser.idと勘違いしてマイページを表示しようとしていたのが原因の様子。

“`:エラー文
ActiveRecord::RecordNotFound in UsersController#show
Couldn’t find User with ‘id’=edit
“`

### ルーティングはこんな感じ

“`ruby:routes.rb
Rails.application.routes.draw do
resources :users, only: :show
devise_for :use

元記事を表示

先輩に絶対に覚えておけと言われたもの

### if関連

Rails における nil?, empty?, blank?, present? の使い分けとBetter Practice
https://qiita.com/aeroastro/items/b58228decb7094af7594

### データの取り出し

find、find_by、whereの違い
https://qiita.com/tsuchinoko_run/items/f3926caaec461cfa1ca3

pluckメソッドが便利な件について
https://qiita.com/k-o-u/items/31e4a2f9f5d2a3c7867f

元記事を表示

【Ruby on Rails】Active Recordコールバックについて

# コールバックとは
Railsガイドより
>コールバックとは、オブジェクトのライフサイクル期間における特定の瞬間に呼び出されるメソッドのことです。
>コールバックを利用することで、Active Recordオブジェクトが作成/保存/更新/削除/検証/データベースからの読み込み、などのイベント発生時に常に実行されるコードを書くことができます。

Active Recordのコールバックは、ModelなどのActive Recordオブジェクトが更新されたり削除されたりして状態が変わるときに、その前後でイベントが発生する。
そのイベントで任意の処理を行うことができる。

# コールバックの登録方法
例)会員データが削除された時にログを出力する

“`ruby:app/models/member.rb
class Member < ApplicationRecord 略 after_destroy do Rails.logger.info "Member is deleted: #{self.attributes}" end end ``` # 種類 Active

元記事を表示

jQuery割と理解したから一通り使えるようになるコツまとめ(Rails)

RailsでWEBアプリを作ってます。Ruby on Railsの経験値は9月でちょうど1年くらいです。
なんか割と色々な機能を作れるようになったのでちょっとまとめていきます。
こんな機能はどうやって作るの?みたいなのがあればコメントください。考えます。

# jQueryとは?

公式:[https://jquery.com/:title]

この記事を見ていたら特に必要ないとは思いますが、一応Wikipediaから引用

>jQuery(ジェイクエリー)は、ウェブブラウザ用のJavaScriptコードをより容易に記述できるようにするために設計されたJavaScriptライブラリである。ジョン・レシグが、2006年1月に開催された BarCamp NYC でリリースした。様々な場面で活用されており、JavaScriptライブラリのデファクトスタンダードと呼ぶ者もいる[2]。ロゴの下に表記されているキャッチコピーは「write less, do more」(「少ない記述で、もっと多くのことをする」の意)。
>出典:[https://ja.wikipedia.org/wiki

元記事を表示

Railsアプリでログ情報などの大量のcsvエクスポート(出力)をWEBアプリ上で行う

# 出力データが大量すぎて時間がかかる
クライアントからログ情報を分析したいとのことでログ情報をDBから出力するような機能を作ったが
実際に実運用が始まってからログを出力した結果、1, 2日くらいのログであれば時間はかかるがcsv出力できた。しかし、全期間になると時間がかかりすぎて使い物にならない。というような事態に陥った。実際に試してみると15分たっても出力されず、「確かにこれは使えないなぁ。。。」という状態だったので、直接SQLを叩いてログ出力をするようにした。

### それまでに使っていた方法

[RailsでDBのデータをCSV出力しよう|已むに已まれぬ雑記帳|note](https://note.com/shinryyy/n/nbd2c1d466676)
このような感じでよくあるcsv出力をCSVライブラリを使用して出力していた。(これかな。。
[library csv (Ruby 2.7.0 リファレンスマニュアル)](https://docs.ruby-lang.org/ja/latest/library/csv.html)

今回、生SQLで

元記事を表示

ドラッグ&ドロップ可能なファイルフォームの作成方法

#### `label`をブロックにして、その中に`file_field`を入れて`padding`で範囲を拡張すれば、ドラッグ&ドロップ可能なファイルフォームできると思って試したら、できた。

“`ruby
<%= f.label :file, style: "background-color: #f1f1f1;border: 1px dotted #000;" do %>
<%= f.file_field :file, class: 'form-control-file', style: 'padding: 100px', accept: 'text/csv' %>
<% end %>
“`

### 上のコードを試した結果

#### 見た目

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118229/6f6c39ac-ef1b-0db1-ebe3-a4e05933abd9.png)

#### ドラッグ&ドロップも可能

![スクリーン

元記事を表示

Draper + create.js.erbでHTMLタグを含むとシンタックスエラー

Rails 5.2.3
ruby 2.6.6

*.js.erb内でHTMLタグを含むデコレーターを描画できなかったため解決方法を書きました。
## 解決方法
create.js.erb内のJQueryではシングルクォーテーションを使う。

“`javascript:create.js.erb
// OK
$(“#tag”).html(‘<%= @model.start_btn %>‘)

// NG
$(“#tag”).html(“<%= @model.start_btn %>“)

“`

## 原因
ダブルクォーテーションがエスケープされない。

以下エラー。
“`Uncaught SyntaxError: missing ) after argument list
at processResponse (rails-ujs.source.js:272)
at rails-ujs.source.js:200
at XMLHttpRequest.xhr.onreadystatechange (rails-ujs.source.js:255)
“`

元記事を表示

もう迷わない!RSpec導入の流れ

#RSpecとは
 Railsにおいて、単体テストコードを記述するときに用いるGemのこと。
##テストコードを記述する直前までの大まかな流れ
1. Gemfileに追記
2. Gemをインストール
3. rspecをインストール
4. テストコードをターミナル上で可視化できるようにする
5. FactoryBotとFakerのGemをGemfileに追記
6. Gemのインストール
7. (テスト用の画像を用意)

###1. Gemfileに追記

gem ‘rspec-rails’と記述する。
必ず、group :development, :test do ~ endのグループ内に

“`Ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_

元記事を表示

【Ruby on Rails】Webpackerにselect2導入メモ

## jQuery導入
select2を使う為に、jQueryが必要です。

[jQuery導入方法](https://qiita.com/YutoYasunaga/items/9a7eaa0a4ca898535912)

## select2導入

“`:terminal
yarn add select2
“`

“`javascript:app/javascript/packs/application.js
import ‘select2’
import ‘select2/dist/css/select2.css’

document.addEventListener(‘turbolinks:load’, () => {
$(‘.js-select’).select2({
placeholder: ‘Select an option’,
allowClear: true
})
})
“`

## カスタマイズスタイル
“`:sass
$select2-height: 38px

.select2-container
.select2-selec

元記事を表示

OTHERカテゴリの最新記事