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

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

違うコントローラーのページにredirectするときのパス指定

サイトにコメント機能の実装をする際、
comments controllerに

“`ruby:qiita.rb
class CommentsController < ApplicationController def create Comment.create(comment_params) redirect_to item_path(item.id) end private def comment_params params.require(:comment).permit(:text).merge(user_id: current_user.id, item_id: params[:item_id]) end end ``` と記述したところ、データベース上に値は保存されてるけど、redirectがエラーとなり、「undefined local variable or method `item' for #< CommentsController:0x00007f7ef315cdd0 >」
と表示された。

[解決策]
redi

元記事を表示

Rails6で複数チェックボックスを使う!

オリジナルアプリのユーザー登録機能実装中複数チェックボックスを使いました!
初心者のため備忘録として初投稿します!
間違えていたらコメントで指摘をお願いします笑

チェックボックスの書き方

チェックボックスといっても書き方は色々あります。
今回は関連するモデルがあるのでcheck_boxメソッドを使いました。

“`
<%= f.check_box :food, {multiple: true}, food, nil %>
“`
こんな感じです。
languageの部分はそれぞれ指定したいオブジェクト名を入れてください。
ちなみにカラムの型はtext型で指定しています。
複数選択を可能にする為に、{multiple: true}を書きます。

キーのパラメーターを許可する

今回のアプリ製作ではユーザー登録にdeviseを使用しているので、application_controller.rbにのprivateメソッド内にチェックボックスのパラメーターを許可する為の記述をします。

“`
def configure_permitted_pa

元記事を表示

ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked

###はじめに
rails tutorialを学習中です。
学習中、テスト実行時に何度も遭遇したエラー

“`
RuntimeError: RuntimeError: database is locked
“`

“`
ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked
“`
これらがようやく回避できるようになりましたので記しておこうかと思います。

因みに余談ですが、9章まではこのエラーが出ても何度か繰り返し

“`
rails test
“`
とすると5回目くらいでパスすることが出来ていました。(非常に面倒でした)
しかし9章にて何度実行してもパス出来なくなりました。

###試したこと
①rails consoleにて

“`
ActiveRecord::Base.connection.execute(“BEGIN TRANSACTION; END;”)
“`
を実行

元記事を表示

ログインユーザーが、URLを入力しても特定のページに遷移できないようにする

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

2.どういう時に起きるか

3.どのように使うのか

4.ここから学んだこと

1.結論
—————————————-
”redirect_to” と ”unless”を使う!

2.どういう時に起きるか
—————————————-

“`ruby:buy_item_controller.rb
def edit
@buy_item = BuyItem.find(params[:id])
end
“`
例えば、
マイページやマイアカウント、自分の投稿したページを編集する時に”edit”アクションをプログラミングすると思います。

この時に上記のプログラムだけでは、URLに~~**/~~**/editと打ち込んでしまえば、ログアウトしているユーザーや、同じアプリケーションに

元記事を表示

Ignoring nokogiri-1.8.4 because its extensions are not built. Try: gem pristine nokogiri –version 1.8.4

#環境
ruby 2.5.1
rails 5.2.4

#背景
rubyのバージョンを変え、dockerとmysqlを導入した際に、いつの間にかera

#問題

rails sを実行すると以下のログが出力される

“`
Ignoring nokogiri-1.8.4 because its extensions are not built. Try: gem pristine nokogiri –version 1.8.4
Ignoring nokogiri-1.8.4 because its extensions are not built. Try: gem pristine nokogiri –version 1.8.4
Ignoring nokogiri-1.8.4 because its extensions are not built. Try: gem pristine nokogiri –version 1.8.4
Ignoring nokogiri-1.8.4 because its extensions are not built. Try: gem pr

元記事を表示

高校の家庭基礎の課題で友人とAndroidアプリを作った話

# はじめに
こんにちは。高校2年の樅山([@momeemt](https://www.twitter.com/momeemt))です。

通っている高校の家庭基礎で「**ホームプロジェクト**」という課題を出されました。
私たちは「母親(や、父親)に負担がかからないような家事の分担が定着しないこと」を問題点と考え、家族で**たのしく家事を取り組む**ことのできる、**Androidアプリ 「Helpith」**を開発しました。

ホームプロジェクトとは、各自の生活の中から課題を見つけ、家庭科で学んだ知識や技術を生かして、課題解決を目指す学習活動のことです。
See(課題発見・テーマ設定)、Plan(実践計画)、Do(実践活動)、See(評価・反省)の過程を踏んで、家庭的な取り組みを行います。

また、高校生の家庭クラブ活動を推進している全国組織であるところの「全国高等学校家庭クラブ連盟(FHJ)」が昭和50年からホームプロジェクトコンクールを主催しており、優れた研究成果を残したプロジェクトは表彰されています。
興味があれば、[第40回 過去の審査結果](https://kateik

元記事を表示

render後のビューの崩れの原因と解決策【備忘録】

# エラーの内容
送信フォームを押すと、画像のフォームが消えてしまう。

# 状況
フリマアプリのコピーアプリで、商品出品機能を実装中。
itemモデルのデータを登録できるようにフォームを作成し、バリデーションを設定した。
その後、商品画像であるimageモデルのデータも同時に登録できるようフォームを作成した。
データが登録されなかった場合は、元の画面に遷移するようにコントローラーにrender :newを記述。
バリデーションの確認のため、フォームを空白にして送信したところ、renderによってページが遷移したが、
画像の投稿フォームのみ消えてしまうという挙動を示した。

ブラウザの画像
https://gyazo.com/c0ba763dcc41e6b4d2fdbc8246208a32

遷移後のブラウザの画像
https://gyazo.com/bd1b0e347b3156486149240e7479af98

# コード

“`items_controller.rb
class ItemsController < ApplicationController def ind

元記事を表示

【API】RailsとNuxtとCircleCIを使ってモダンですぐ開発出来る開発環境を構築(導入篇)【自動テスト付】

# この記事を書くにあたって

[【AWS?Docker?】ポートフォリオで必要な知識を自分なりに分かりやすくまとめる【terraform?CircleCI?】](https://qiita.com/Shogo1222/items/8b8fc4c65632844a453f)

CircleCI???Docker???って人はまずはこれを見てください。↑

勉強のための勉強はあんまり意味ない・・・。だからまず手を動かしとこ〜!
ということで今回はハンズオン形式で記事を書いていきます。
読んでくださる方がサクッと開発環境構築してさっさと開発に専念出来ると嬉しいです。

なるべくエラーで苦しまないよう、3回くらい自分の環境で再現しました。

# この記事で目指すゴール
– RailsとNuxtを使ってHello World!
– RailsをAPIモードで起動・NuxtでRailsのデータを引っ張ってくる。
– Railsでユーザーテーブルを作り、Nuxtでユーザーを作成する。
– rspecを導入してテストを実行してみる。
– CircleCIと連携して自動テストしてみる。

長いですが頑

元記事を表示

Railsのログでもちゃんとマスクする

# 結論

クエリログのマスクに関しては[こちらのコード](https://qiita.com/calorie/items/426fb4c23ab850122f93#activerecordlogsubscriber%E3%81%AB%E3%83%91%E3%83%83%E3%83%81%E3%82%92%E3%81%82%E3%81%A6%E3%82%8B)で `ActiveRecord::LogSubscriber` にパッチをあてる

# ログのマスクとは

ログ上の個人情報等の機密情報を特定の文字列に置換して隠すことを指しています。
マスクすることで機密情報の漏洩のリスクを低減させることができるため、マスクをすることは重要なことです。

# Railsでのログのマスク

Railsでのログのマスクというと `config.filter_parameters` があります。
マスクしたいパラメータを指定することで、リクエストのログ上のパラメータをマスクしてくれる便利な機能です。

ただし、[こちらのissue](https://github.com/rails/rails/iss

元記事を表示

RSpec単体テストコード作成手順(ログインユーザー作成Ver.)

RSpec単体テストコード作成手順(ログインユーザー作成Ver.)

RSpecの単体テストコードの作り方を、ざっくり一眼でわかるようにまとめないと慣れるまで今後苦労すると思ったので、作成手順を自分なりにまとめてみました。

1.RSpecを使用するためのgem導入

・Gemfile

“`ruby
group :development, :test do
#省略
gem ‘rspec-rails’
end
“`
・ターミナル
% bundle install

2.RSpecを導入

・ターミナル
% rails g rspec:install

3.テストコードの結果をターミナル上で可視化するための設定

/.rspec

“`ruby
–require spec_helper
–format documentation
“`

4.FactoryBotとFakerのgemを導入

・Gemfile

“`ruby
group :development, :test do
# 省略

元記事を表示

RailsのViewに複数のsubmitボタンを設置して押されたボタンの値を取得する

# やりたいこと
以下のように、複数のボタンを設置して、押されたボタンの値を取得します

# View
selectコントローラの、purposeアクションに飛びます

“`button.html.erb
<%= form_tag({ :controller => ‘select’, :action => ‘purpose’ }) do %>
<%= submit_tag "A" %>

<%= submit_tag "B" %>
<%= submit_tag "C" %>
<%= submit_tag "D" %>

<% end %>
“`
# Controller

params[:commit]にボタンの値が入り

元記事を表示

後から.gitingnoreにファイルを追加する

#【1】 .gitignoreに除外したいファイルを記載
“`
#.gitignore
/spec/examples.txt
“`

#【2】除外したいファイルのキャッシュを削除

“`
$ git rm –cashed spec/expamples.txt
“`

#【3】.gitignoreをプッシュする

“`
$ git add .gitignore
$ git commit -m “Add file to .gitignore”
$ git push origin master
“`

#【4】githubにある除外したいファイルを削除

元記事を表示

railsをdockerを導入した際のメモと遭遇したエラー

#dockerfile

“`Dockerfile
FROM ruby:2.5.1
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash – && apt-get update && apt-get install -y nodejs –no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN mkdir /myapp
ENV APP_ROOT /myapp
WORKDIR $APP_ROOT
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT [“entrypoint.sh”]
EXPOSE 3000
CMD [“rails”, “server”, “-b”, “0.0.

元記事を表示

railsのdbをsqlightからMysqlに変更する際に、bundle installでエラーが発生

#背景
1. railsアプリのdbをsqlightからmysqlに変えようとしていた。
2. database.ymlとgemを書き換えた
3. bundle installをしたら, 以下のエラーが発生

“`
> An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
> Make sure that `gem install mysql2 -v ‘0.5.3’ –source ‘https://rubygems.org/’` succeeds before bundling.”
“`

#試したこと

1.エラー内容にある通り、gem install~~を実行しても、解決しなかった。
2.ログの確認

“`
> ld: library not found for -lssl
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
“`
で終わっていることを確

元記事を表示

macOSにGitLab開発環境セットアップ (GDK) (2020年9月)

**tl; dr:** GitLab本体(Web UI, API)をmacOS環境で開発する環境を用意する。

毎年のように、統合DevOpsプラットフォームGitLabの開発環境のセットアップ記事が作成されるが、日本語でQiitaで閲覧できる最新版になると想定して記述する。

### 想定

macOS: 10.13, 10.14, 10.15の想定。10.15の人はZshになっている可能性もある。MacBook Pro (Retina以降)が望ましいが、MacBook/MacBook Airでも動くと思われる。筆者はMacBook Pro (Retina, 13-inch, Mid 2014) i5 2コア 8GBメモリ、128GB SSD(空き容量20GB)で確認した。

GitLabコミュニティメンバー(つまり誰しも)を想定。

### なぜ書くのか。

2020-09-02/2020-09-03で開催されるGitLab Hackathon 3Q 2020を日本語で https://gitlab-jp.connpass.com/event/187652/ https:

元記事を表示

ProgateのRailsアプリを自分のPC(ローカル環境)で再現しようとしたら、画像表示のところで詰まった

概要

ProgateのRailsアプリを自分のPC(ローカル環境)で再現しようとしたら、画像表示のところで詰まった。

開発環境

macOS catalina バージョン10.15.6

Rails 6.0.3.2

ローカル開発環境

エラーメッセージ

undefined method `image_name’ for nil:NilClass

解決方法

それまでに投稿していたポスト( image_nameカラムを追加する前の投稿)があるため、エラーが発生しているっぽい
→全部消したらいけた

__それまでの投稿の消し方__

`rails console`

`Post.destroy_all`

これで全部削除完了!

エラーの原因になっていたレコード(image_nameというカラムが存在しないレコード)を消したら、無事に画像表示ができました。

感想

ProgateのRailsコースのアプリ(Tweetapp)を自分のPC(ローカル環境)で再現できるかな?とい

元記事を表示

Rails generate model の命名規則について

# 内容
こちらの記事を参考にしました。
https://qiita.com/seri1234/items/8ca4b52d82390929195f

スネークケースで以下のようにモデルを作成したところ

“`ruby
rails g model model_name # model_nameがモデル名
“`
ファイル名も`model_name.rb`のようにスネークケースだったので、モデルクラス名も同じ表記かと思ったら`ModelName`とキャメルケースだったのでそれに気がつかず作業してたらエラーが発生してしまいました。今後も間違えることが無いようにメモします。

# モデルの命名規則
#### 複数の単語で命名する場合(model nameの例)

| 名称 | 例 | 詳細 |
| —- | —- | —- |
| モデル名 | ModelName | 先頭は大文字で単数系 |
| モデルファイル名 | model_name.rb | 先頭は小文字で単数形 |
| テーブル名 | models | 先頭は小文字で複

元記事を表示

(ギリ)20代の地方公務員がRailsチュートリアルに取り組みます【第2章】

##前提
・Railsチュートリアルは第4版
・今回の学習は3周目(9章以降は2周目)
・著者はProgate一通りやったぐらいの初学者
##基本方針
・読んだら分かることは端折る。
・意味がわからない用語は調べてまとめる(記事最下段・用語集)。
・理解できない内容を掘り下げる。
・演習はすべて取り組む。
・コードコピペは極力しない。

第2章はじめるよ〜

####【2.2.1 ユーザーページを探検する 演習】
1. CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
→ F12で起動。bodyの中の、id:noticeのpタグの中身が消える。

2. emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?
→ ユーザー登録できてしまう。Userモデルにvalidatesが設定されてないからかな。

3. 「@example.com」のような間違ったメールアドレスを入力し

元記事を表示

DBからランダムで100個のレコードを選出

あるデータを保存した時、そのデータにランダムで100人のユーザーを紐つけたかったという内容です。

準備として、「保存したデータを管理するテーブル」と、「ユーザーを管理するテーブル」を紐つけるためのテーブルを新たに作成しておきます。
詳しくはあとで解説します。

まずは元のデータを保存するメソッドにおいて、ユーザー選出のメソッドを呼び出します。

“`ruby
if @item.save
destination_select()
“`

次にユーザーを選出するメソッドを記述していきます。

方針としては、

①空の配列を用意する
②rand関数を用いてユーザーidをランダムに取得する
③取得したidが配列に含まれていなければ、配列に加えて、保存する
④含まれている場合はrand関数をやり直す

となります。

それでは一つずつ見ていきます。

①空の配列を用意する

“`ruby
def destination_select
user_ids = []

元記事を表示

【FactoryBot】【trait】を使って、わかりやすくテストデータをつくる

#はじめに

Traitsを使うと、

“`ruby:spec/requests/api_spec.rb
let!(:words_starting_with_ruby) { create_list(:product_suggest, 6, :ruby) }
let!(:word_starting_with_rails) { create(:product_suggest, :rails) }
let!(:api_key) { Rails.application.credentials.api[:API_KEY] }
“`

上の
> create_list(:product_suggest, 6, :ruby)

> create(:product_suggest, :rails)

の:ruby, :railsといったようにステータスを指定してテストデータを作ることができ、使いやすい。

#定義

“`ruby:spec/factories/product_suggests.rb
FactoryBot.define do
factory :produ

元記事を表示

OTHERカテゴリの最新記事