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

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

undefined method `name’ for nil:NilClassの解決策

#はじめに#
はじめまして、プログラミング歴2ヶ月足らずの者です。同じエラーが発生した方のお力になれたらと思い、初めての投稿をさせていただきます。もし、記事内容に間違った内容などございましたらご指摘いただけると幸いです。

#背景#

productとその名前や値段などを表にして表示し、商品の管理画面を作成しようとしていました。

#エラー内容#

“`products.index.html.erb
<% @products.each do |product| %>

<%= product.id %> <%= image_tag "/images/dummy.png", class: "img-fluid h-10" %> <%= product.name %> <%= product.price %>
元記事を表示

Railsチュートリアル(第6版) 第6章 ユーザーのモデルを作成する

#第6章
この章はユーザーモデルを作っていく。前章はスタブページまでで終わったが、これからひたすらユーザー登録に関することを学んでいく。
(なんと本章から第12章までひたすら作っていくのでしんどい道となる)
頑張ろう

##Userモデル
ユーザー登録するからユーザー登録用ページを作る前に、まずは名前、メールアドレス、パスワード等を保存するためのデータ構造を作成しなければならない。
このデータ構造を、Railsでは**Model(モデル)**という。
また、データベースとやり取りするためのRailsライブラリは、**Active Record**と呼ばれる。
通常データベースを使うなら、SQLという言語を使うが、Railsではマイグレーション機能で、データベースの構造を切り離してくれるため、SQLを意識しなくてもOK
(この辺りの機能便利だなーと思った。筆者は仕事でSQLを多少なりと触っていた経験があるので、SQLをいじらず作成できるのはでかい)

なおRailsチュートリアルでは、開発環境ではSQLiteを使用し、本番環境はPostgreSQLを使う。

###データベース移行

元記事を表示

草野球の出欠確認Webアプリを作ろう! part.11

これから作っていく簡単なWebアプリの作成メモ(自分の備忘)です。
自分用なのであまり凝りすぎないように書いていきたい。

[<<前回の記事](https://qiita.com/tomodachi_uec/items/4d9633635c9964053efd) ##今回やったこと ###Bootstrapの導入 導入を通して以下のWeb記事を参考にした。 [Rails6でBootstrapを導入する方法](https://medium-company.com/rails-bootstrap/) まずYarnでBootstrapの導入に必要なものの準備をする。 (以下コンソールの最初の一行のみ手動で入力している、あとはログ表示) ```bash $ yarn add jquery bootstrap popper.js yarn add v1.22.5 [1/4] Resolving packages... warning popper.js@1.16.1: You can find the new Popper v2 at @popperjs/core, this pack

元記事を表示

質問フォーマットの素晴らしさ

質問フォーマットの素晴らしさ

元記事を表示

Qiita質問フォーマットの素晴らしさ

## Qiitaの質問フォーマットの素晴らしさを痛感したため、書き残させて頂きます!

こんにちは、koheiです。

Qiitaで質問をしようとして、改めて質問フォーマットはよくできているなと感じました。
その理由は
### 自己解決に導かれる
ためです。
そのきっかけになる部分は該当するソースコードをまとめた後に登場するこれです。

___
### 自分で試したこと
ここに問題・エラーに対して試したことを記載してください。
___

該当するであろうソースコードを記載した後、ここで自分の検証した内容をまとめていると
**本当にこれで質問して大丈夫?**
**予想以上にしょうもない失敗だとしたらどうしよう**
と改めて自分の置かれている状況を見直すことができます。

直前にソースコードをまとめていることもあり、問題の棚卸しができるので
### 初学者こそ質問フォーマットを活用して素早く問題解決を目指すべき
だと感じました。

自分は某プログラミングスクールに通っていたのですが、
メンターに相談するために「質問フォーマット」が定められていて
その時も質問を作成することで頭の中が整理さ

元記事を表示

僕はAPEXプレデター!そろそろ仕事したい!

こんにちは!
無職の22歳男です。
今までろくに働いたことがなく、ずっとゲームや友達との遊びに明け暮れていました。
特にハマっていたのはAPEXLEGENDSというバトルロイヤルゲームです!
大学卒業の友人たちが今年から就職したこともあり、
そろそろ仕事をしたいのでプログラミングを習得しようと思っています。
日記のような形で学んだことを
アウトプットしようと思います。
目指せGoogleエンジニア!!!

元記事を表示

[Rails]link_toメソッドからcreateを実行する

# 記事の概要
 link_toでのcreateを実装したのでメモ。
 いつもcreate実行するときはform_withのフォームからユーザーが入力したものを送信してサーバー側で受け取りcreateすることが多い。しかし、ユーザーが何も情報を入力する必要がないとき(開発者が予め決めている時など)、リンクボタン押すだけでcreateアクションを実行することを想定します。

# コード
 ビューファイルの記述例。 hogesコントローラーのcreateアクションへのパスを指定し、その後ろに送りたいパラメータを記述する。そして、link_toの後ろにHTTPメソッドのPOSTを指定する!! 

“`views/hoges/new.html

<%= link_to "fuga", hoges_path(user_id: current_user.id, hoge_name: current_user.name), method: :post %>
“`

 受け取る側の記述。

“`ruby:hoges_controller
class HogesController < App

元記事を表示

【Rails6/MySQL5】既存アプリにDocker環境を構築した方法(Capistrano・Amazon S3にも対応)

Railsで開発した既存アプリにDocker環境を実際に構築した方法をご紹介します。

## ゴール
– 既存のRailsアプリにDockerの開発環境を構築
– Mysqlエラーを起こさずCapistranoによる自動デプロイ

## 開発環境・前提
– Ruby 2.6.5
– Rails 6.0.3.6
– Docker 20.10.6
– docker-compose 1.29.1
– mysql 5.6.50
– Capistrano 3.16.0
– アプリのインフラにAmazon EC2, S3を使用

## 最初に:Docker環境の構築で一番難しかったこと
ぼくが実際にDocker環境を構築するときに一番難しかったことが、MySQLの接続エラーの解決でした。
これから初めてDocker環境構築をするという方は覚悟して臨んだ方が良いと思います笑

## 各ステップで参考にした資料
順番が前後しますが、先にぼくがDocker環境を構築したときに参考にした資料を紹介します。
このあと紹介するコードも、基本的には以下の参考資料を組み合わせて作りました。

Rails6とMy

元記事を表示

no suitable image found. Did find: (LoadError)が出た時の対処方

rails s

“`
Traceback (most recent call last):
27: from bin/rails:3:in `


26: from bin/rails:3:in `load’
25: from /Users/yamabasic/bin/spring:15:in `
24: from /Users/yama/.rbenv/versions/2.6.4/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require’
23: from /Users/yama/.rbenv/versions/2.6.4/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require’
22: from /Users/yamabasic/vendor/bundle/ruby/2.6.0/gems/s

元記事を表示

undefined method `map’ for nil:NilClassエラー

![20210524-205440.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/477989e9-e0ef-39df-0c5b-dccb07b5858b.png)

map, map! メソッドとは

map は、配列の要素の数だけブロック内の処理を繰り返し、結果として作成された配列を返します。mapは元の値に対して影響を与えないのに対し、map!は元の値を書き換えます。また、Rubyには **collectメソッド**がありますが、これは**mapメソッドの別名**です。

“`rb:【誤】
def index
@products = Product.all
end

def search
@results = @p.result.includes(:category)
set_product_column
end

private

def search_product
@p = Product.ransack(pa

元記事を表示

重複したデータを除外するdistinct

distinctメソッドの返り値はActiveRecord::Relationオブジェクト

“`rb:コンソール/catsテーブルの一意のspecies列を取得する
cats_species = Cat.select(:species).distinct
SELECT DISTINCT `cats`.`species` FROM `cats`
“`

“`rb:
user_ids = UserCheckin.pluck(:user_id).uniq
“`

uniqメソッドとは?distinctとの違い

uniqメソッドとは、Railsで取得した重複レコードを1つにまとめるためのメソッドです。
uniqメソッドを実行すると、Railsは内部的にSQLのDISTINCTを実行します。
その他に、uniqメソッドとまったく同じ働きをするdistinctメソッドも存在します。

両者の違いは、

|uniqメソッド|Rails5以降で非推奨(または使えなくなる)|
|–|–|
|distinctメソッド|Rails5以降で正式メソッド|

元記事を表示

Ruby 問題④ if,else問題

##はじめに

現在はオリジナナルアプリの作成しつつ、毎朝送られてくるrubyドリルを復習しております。
本日もrubyドリルのアプトプットをします!

##問題
19時から翌朝6時までにオウムに喋られると近所迷惑なのでその場合は「NG」、
それ以外は「OK」と出力するメソッドを作成します。
オウムが喋る時をtrue、喋らない時をfalseと入力することにし、時刻も同時に入力します。

“`.rb
#呼び出し方
parrot_trouble(talking, hour)

#出力例
parrot_trouble(true, 5) → NG
parrot_trouble(true, 7) → OK
parrot_trouble(false, 6) → OK
“`

##ヒント

〜だった時、かつ〜だった時

19時〜6時をどのように記述するか

##解答

“`.rb
def parrot_trouble(talking, hour)
if talking && (hour < 6 || hour >= 19)
puts “NG”
else
puts “O

元記事を表示

f.collection_select

<%= f.collection_select 第一引数, 第二引数, 第三引数, 第四引数, 第五引数, オプション %>

|引数|具体値|役割
|–|–|–|
|第一引数(メソッド名)|:name_eq|・カラム名・name属性やid属性を決める|
|第二引数(オブジェクト)|@products|配列データを指定する|
|第三引数(value)|name|表示する際に参照するDBのカラム名|
|第四引数(name)|name|実際に表示されるカラム名|
|オプション|include_blank|何も選択していない時に表示される内容|

元記事を表示

Active Model Serializerを使用してAPIのJSONを指定のハッシュにネストしたい

Active Model Serializerを使ってAPIを生成してみました。
しかし、一部で少し詰まったので記録しておきます。

### やりたいJSONの形
“`json
{
“data”: [
{
“id”: 1,
“category_name”: “study”,
“body”: “hoge”
},
{
“id”: 2,
“category_name”: “study”,
“title”: “hogehoge”
}
]
}
“`
こちらで指定したハッシュ(data)の中にネストしたい。

### 問題

コントローラでrenderを行い、jsonにtodosの変数を渡す。
その際に、”data”というハッシュの中にそれらの値を入れたい・・・が、
変数を直接dataハッシュの中に入れると、Serializeで整理したはずが全部表示されてしまう・・・

元記事を表示

Dockerを使った環境構築

Farstepさんの動画
「rails環境構築】docker + rails + mysql で環境構築(初心者でも30分で完了!)」

を視聴して環境構築をしました。かなり分かりやすくまとめられており、好き、結婚したいと思いました。備忘録も兼ねて投稿します。

環境セット
rails:5.2.2
ruby:2.5.9
docker
mysql:5.7

“`ruby:terminal
$ docker-compose run web rails new . –force –database=mysql –skip-bundle
“`
まずは上記のように実行したら
以下のようにポート3306はもう使われていると出てきてしまったので、

“`ruby:terminal
ERROR: for mysql Cannot start service mysql: Ports are not available: listen tcp 0.0.0.0:3306: bind: addres

元記事を表示

[Rails]インクリメンタルリサーチの実装

# はじめに
今回は以前実装したインクリメンタルサーチの実装の振り返りをします。

# インクリメンタルリサーチとは

文字の入力の都度、自動的に検索が行われる検索機能です。
JavaScriptのAjaxを用いて、実装を行います。
以下のGIFでは、正と打つと正確というタグが候補として即座に表示されます。

Image from Gyazo

# 実装

それでは実際の実装についてみていきます。

“`tag.js
if (location.pathname.match(“/new”)||location.pathname.match(“/edit”)||location.pathname.match(“/practices”)){

document.addEventLi

元記事を表示

リレーション先の他のモデルのカラムをソートする(Rails, Ransack)

# やりたいこと
Railsのgem、[ransack](https://github.com/activerecord-hackery/ransack)で検索やソートができますが、リレーション先のレコードをソートしたいです。

具体的には、postsテーブルとusersテーブルがあり、posts/index.html.erbで、postを投稿したユーザーも表示しソートできるようにしたいです。

各モデルは以下のような感じ(必要なとこだけ抜粋しています)。

“`ruby:post.rb
# == Schema Information
#
# Table name: posts
#
# id :bigint not null, primary key
# user_id :bigint not null

belong_to :user
“`
“`ruby:user.rb
# == Schema Information
#
# Table name: users
#
# id :big

元記事を表示

画像があったら表示されるようにしたい

#概要#
Sequel Proに画像が保存されているのに表示されない

Sequel Pro
https://gyazo.com/38c3b30151a6655dd1c79b2fd4ecfa53
localhost:3000/
https://gyazo.com/b5af69a52d4c7a625accbebf4e84d39a

#コード#

“`
<% if @items.nil? %>
<% @items.each do |item|%>

  • <%= link_to item_path(item.id),method: :get do %>

    <%= image_tag item.image, class:"item-img" if item.image.attached? %>
    <% end %>

    “`

    “`
    <%= image_tag item.image, class:"item-img" if

  • 元記事を表示

    RailsコンソールでパスのURLを確認する

    ## はじめに
    Railsで〇〇_pathと指定することがあるかと思います。
    ではそのパスはどのURLに対応しているのかを確認する方法はどうすればいいのかをまとめます。

    $\mathbb{それでははじめていきましょう}$

    ## rails routesでルートを確認する

    “`console:コンソール
    % rails routes 
    “`
    `rails routes`でパスを確認します。

    例えばこんな結果が返ってきたとします。

    “`console:結果
    Prefix Verb URI Pattern Controller#Action
    root GET / items#index
    items GET /items(.:format)

    元記事を表示

    Railsチュートリアルを完全SPA化してみた

    # Railsチュートリアルを完全SPA化してみた
    今回は、自分なりに**Rails tutorial**を`Rails API`と`next`を用いて**SPA化**してみたので、それを振り返って見ようと思います。

    基本的に**バックエンド**側の内容は、**Rails tutorial**の`render`を`jbuilder`や`json:`に変更してる程度なので、詳しくは**Rails tutorial**をご購入ください。
    ですので今回の記事では、**フロントエンド**の内容をメインに振り返りたいと思います。

    ## サイト概要
    **Rails Tutorial**(rails ver 6.0)用のアプリケーションを`Rails API`と`next –typescript`を用いて完全SPA化しました。

    [プロダクトページはこちら](https://rails-tutorial.vercel.app/)
    自分が見本としたチュートリアルである、[Rails tutorialのページはこちら](https://railstutorial.jp/chapters/begin

    元記事を表示

    OTHERカテゴリの最新記事