- 1. gemのransackで複数カラムを検索対象にする方法
- 2. 【エラー】ActiveRecord::NoDatabaseError FATAL: database does not exist
- 3. deviseコントローラーで出逢ったsuperについて調べてみた
- 4. Railsで個人開発してたら、Railsがめっちゃ叩かれて辛みだった話
- 5. 【Boostrap】なんで動かないの?jQueryちゃん?〜長い長いエラーとの戦い〜
- 6. 【Rails】raty.jsを使った評価機能を作る
- 7. テーブルにカラムを追加する方法
- 8. RSpec~Taskモデルのバリデーションテスト作成まで
- 9. railsでほぼ静的なページの作り方
- 10. rails学習 rakeタスク・cron・whenever
- 11. Docker+Railsにdotenvを導入して環境変数を管理する
- 12. params flash sessionの寿命を考えたことがあるか。
- 13. 必ず役に立つ!Ruby on Railsでの開発で使えるデバッグコード
- 14. ブラウザのセッションとCookieの違いとRailsのsession,cookiesメソッドの違いについて
- 15. Rails 記事詳細リンクは、ループ内でしか機能しない?
- 16. Ruby on Railsのconfig設定
- 17. 不正な config/master.key が原因でRailsの起動に失敗するケースとその対処方法
- 18. SNS認証時のエラーについて
- 19. Rails 検索機能の実装
- 20. 【Ruby on Rails】Rails Tutorialを全部終えたので、追加で「ストック機能」を実装してみた
gemのransackで複数カラムを検索対象にする方法
##始めに
僕自身複数カラムを検索対象にするのは難しいと思っていたのですが、思っていたより簡単にできたので是非参考にしてもらえたらなと思い、書くことにしました。##前提
僕はPostモデルのtitleとdescriptionを検索対象にやっていきます。“`ruby
class CreatePosts < ActiveRecord::Migration[5.2] def change create_table :posts do |t| t.string :title ⬅️⬅️⬅️⬅️⬅️⬅️これ t.integer :recommended t.text :description ⬅️⬅️⬅️⬅️これ t.references :user, foreign_key: true t.timestamps end add_index :posts, [:user_id, :created_at] end end ``` ##やり方 始めにviewの一部を変えていきます。 ti
【エラー】ActiveRecord::NoDatabaseError FATAL: database does not exist
ターミナルにて、
`rails db:create`
をするとRailsが自動で決めた名前でデータベースを作ってくれました。
deviseコントローラーで出逢ったsuperについて調べてみた
#はじめに
ユーザー管理でdeviseを使っています。コントローラーをいじっていると、メソッドの中に`super`とだけ記述があるメソッドがあったので、疑問に思い、調べてみました。##deviseのコントローラー
“`bash
rails g devise:controllers user
“`
でコントローラーを生成しています。“`ruby:user/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController (略) def update super end (略) end ``` どうやら、`Devise::RegistrationsController`クラスから継承されているようです。 いくつかのメソッドの中に`super`が存在します。 ##superとは ずばり、superは、継承元のメソッドを呼び出すことができるメソッドです。
上記のコントローラーを
Railsで個人開発してたら、Railsがめっちゃ叩かれて辛みだった話
こんにちは、だむはです。
去年の12月に個人開発している「sister」というサービスをリリースしたのですが、開発中にRails叩きがおこり、辛みだったので、その時のことをかこうと思います。ちなみに、サービスはまだベータ版です。
##「sister」ってどんなサービス?
「sister」は一言で言うと、IT業界に特化した女性向けのキャリア/スキルシェアサービスです。MENTAから多大なる影響を受けています。MENTAは「師弟関係」、sisterは上下関係をもたない「姉妹関係」と言う部分でシスターフット大切にしていこう!って感じです。興味があったらみてってください。
[あなたのsisterを探そう](https://sisterwith.com)##環境
sisterの開発はこんな感じです。
・Ruby
・Rails
・Stripe
・AWS S3
・Heroku
ちなみにローカルはDockerです。はい、フロントエンドにモダンな技術も使ってないし、インフラもAWS使ってないです
##なぜこの環境なの?
それは、純粋に私一番使える言語がRailsだったからです!
【Boostrap】なんで動かないの?jQueryちゃん?〜長い長いエラーとの戦い〜
### この三日間悩みまくっていたこと
ポートフォリオを制作してエンジニア業界で働き始めた諸先輩方の投稿とgitのソースコードをいくつか拝見させて頂き、フレームワークを使った方が実装が早くなるということを知ったのですが、
自分のアプリケーションもレスポンシブ化したいということと、デザインセンスが皆無という自分のスペックに早めに見切りをつけ、早々にBootstrapを使用すると決めていました。先日バックエンドの実装がだいたい終わったので、さあBootstrapと戯れるぞと思い公式で目に止まったものを表示できるかどうか試してみることに。
![e7edb6a9d019b4695f901555aefe8930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/887559/a78ad10b-4fe6-3bf2-78e7-41301440b92e.png)
良い感じのデザインですね!
これを表示するには・・・ほほう貼り付ければ良いのか。やってみよう。![
【Rails】raty.jsを使った評価機能を作る
raty.jsを使って、railsアプリに星画像付きの評価機能を実装する方法です。jqueryが必要です。
![ 2021-01-18 21.35.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244893/9fb4a95b-e445-3f8a-7ef9-56f396f79280.png)
## 環境
“`zsh
$ rails -v
Rails 5.2.4.4
“`
## jqueryを導入
“`rb:Gemfile
gem ‘jquery-rails’
“`
“`zsh
$ bundle install
“`
“`app/assets/javascripts/application.js
//= require jquery
“`## jquery.raty.jsを作成
“`zsh
$ touch app/assets/javascripts/jquery.raty.js
“`
作成したファイルに、https://github.com/wbotelhos/raty
テーブルにカラムを追加する方法
今回はmigrateファイルの記述をして追加する方法を実行します。
#migrateファイルを編集
まず、README.mdを参考にmigrateファイルを編集します。“`README.md
## items テーブル| Column | Type | Options |
| —————– | ———- | —————– |
| name | string | null: false |
| explanation | text | null: false |
| category_id | integer | null: false |
| state_id | integer | null: false |
| delivery_price_id | integer | null: false |
RSpec~Taskモデルのバリデーションテスト作成まで
#RSpecとは
Rubyにおけるテスティイングフレームワークのことです。Rubyでは標準で`Minitest`という別のフレームワークがあります。[Ruby on Railsチュートリアル](https://railstutorial.jp/)でも`Minitest`でテスト方法を教わります。
ですが、実際に現場で使われているテスティイングフレームワークは`RSpec`が圧倒的に多いようです。本記事では`RSpec`をインストールし、既に定義されているモデルに対してバリデーションテストするまでを記載します。
#使用技術のバージョン
・Ruby: 2.6.4
・Ruby on Rails: 5.2.3#モデルの概要
今回取り扱うモデルは`user`モデルと`task`モデルです。*[userモデル]*
“`ruby:app/models/user.rb
class User < ApplicationRecord has_many :tasks, dependent: :destroy validates :password, length: { mi
railsでほぼ静的なページの作り方
>引用先
>[Railsチュートリアル](https://railstutorial.jp/)※ rails new appをしている状況で新しくページを追加するところからです
#ターミナルでコマンド実行
まずは作業ディレクトリへ移動
“`
cd ~
“`移動後コマンド実行
“`
$ rails generate controller <コントローラ名> <アクション名> <アクション名> ・・・# 例
$ rails generate controller StaticPages home help
“`
上記コマンドを実行すれば・コントローラの作成
・ルーティングの設定
・ビューファイルの作成
を自動で作成してくれるので非常に便利かつ簡単ですね!実際これだけでページは作れちゃいます。
#新たにページを追加したいとなった時
例えば、新たにaboutページを作成したいとなった時に、手動でファイルを作成したりコードを書けば追加もできます。##手順
①ルーティングの設定
②コントローラにアクション追加
③ビューファイルの作成###①ルーティング
rails学習 rakeタスク・cron・whenever
#課題で行ったrakeタスク・cron・wheneverの使い方とその際のコード記述での覚えておきたいポイントを確認する。
#rakeタスク
行いたい処理を定義することにとって、アプリケーションを起動せずに定義した処理を実行することができる
#cron
「〇時に〇〇のコマンドを実行」というふうに時間によってコマンドを実行させることができる
#whenever
cronをrubyの記述方法にして描きやすくしたもの。
schedule.rbにかいた記述を“`bundle exec whenever –update-crontab“`することによってcronに処理が記述される#rakeタスクの書き方
今回rakeタスクに設定する処理は「公開待ちの中で、公開日時が過去になっているものがあれば、ステータスを「公開」に変更されるようにする」である①まず、公開待ちの中でというところは「記事が公開待ちつまりArticleのstateがwait_publish」になっているものであるため
“`
Article.wait_publish
“`②次に①の中から公開日時が過去になってい
Docker+Railsにdotenvを導入して環境変数を管理する
# 実現したいこと
Dockerを使ったRails開発で、公開してはならないAPIキーやパスワードなどを別ファイルでGit管理する方法。# 大雑把な順番
1. gemを追加
2. .envファイルにプロジェクトで使う環境変数を記述
3. .gitignoreに.envファイルを含める
4. erbテンプレートに従って環境変数を渡す# 使用したバージョン
– Rails6
– ruby 2.7.2# 手順
## gem ‘dotenv-rails’を追加
“`ruby:Gemfile
gem ‘dotenv-rails’
“`## コンテナ内にbundle installを行う
“`shell:bash
docker-compose run コンテナ名 bundle install
“`## docker-compose.ymlを編集
yml内にenv_fileと書くことで環境変数を管理するファイルを読み込む設定ができる“`ruby:docker-compose.yml
code:docker-compose.yml
web:
省略
params flash sessionの寿命を考えたことがあるか。
##sessionとかflashってどれくらいの間データを保持しているんだろう?
railsでウェブサイトを作っている時、定義した変数等は画面を遷移した時に、すぐに消えてしまいます。
@user等のインスタンス変数は一度の画面遷移で死んでしまう経験をしたことが多いと思います。
__sessionやflashは長生きすると聞いていたので、寿命を見てみたい!__という好奇心から記事を書きました。##実験開始
今回は自分のPFに無理やり作ったので少し見にくくなっています。
###①コントローラにsession flash paramsの出場選手を定義
とっつきにくいイメージかもしれませんが、案外カジュアルに定義できちゃいます。“`rb:コントローラ
def top
session[:life]=”私はsession。生きています”
flash[:life]=”私はflash。生きています。”
params[:life]=”私はparams。生きています。”
end
“`###②ビューページに選手達を表示する記述を追加
“`erb:ビュー
必ず役に立つ!Ruby on Railsでの開発で使えるデバッグコード
# こ~れなんなん、これなんなん
こんにちは。開発で最も必要とされる技術ってデバッグ力だと思っています。特にバグを大量生産することが得意な僕にとって、デバッグ力はとても大事。
そこで、普段開発で使ってるデバッグ用のコードをまとめておこうかと思います。
## デバッグコード
Ruby on Railsで使える、デバッグで役に立ちそうなコードの一覧を書いていきます。なお、Rubyで使えるコードもあります。byebug起動時や`rails console`で使用することを想定しています。byebugの使い方よく分からんて人は以下の記事で使えるようにしてください。
https://web-nari.net/2018/03/16/byebug/### メソッド一覧
`hoge`という変数の参照できるメソッドの中で、メソッド名に`method_name`が含まれるメソッドの一覧を返します。“`ruby
hoge.methods.select {|name| name.to_s.include?(“method_name”) }
“`### メソッド定義場所
`hoge`
ブラウザのセッションとCookieの違いとRailsのsession,cookiesメソッドの違いについて
## はじめに
この記事はRails初学者が書いています。
ご容赦ください。また、間違っている点があれば指摘していただければ幸いです。
## それぞれの違い
### ブラウザのセッション
あるサイトに接続してから切断するまでの一連の流れのこと。
### ブラウザのCookie
ユーザー側のブラウザに保存しておく情報のこと。
一時Cookieと永続Cookieがある。
前者はブラウザ終了時に自動で消える。
後者はユーザー側、サーバー側のどちらかで手動で消去するまで残っている。HTTPプロトコルではログインしているという情報を記憶しておくことができない。
そのため、こういった機能で保存しておき、ページ移動の際に毎回Cookieを確認する必要がある。### Railsのsessionメソッド
ブラウザの一回のセッションに必要なデータを残しておくためのもの。
具体的には、ブラウザの一時Cookieに暗号化したデータを保存するメソッドRailsチュートリアルでは、ここにログインしているユーザーIDを保存している。
ユーザーIDを保存しておくことでブラウザを閉
Rails 記事詳細リンクは、ループ内でしか機能しない?
## 背景
Page#homeで記事一覧(Posts#index)を表示し、そこに記事詳細(Posts#show)をリンクを貼った。そのときに学んだ事の備忘録。## 結論
記事詳細リンクはこう貼った。(成功したコード)
“`ruby
<% if @posts.any? %><% @posts.each do |p| %>
#記事詳細のリンク↓
++<%= link_to post_path(p), class: 'text-body' do %><%= image_tag p.image.url, class: 'img-fluid' %><%= p.title %>
<%= p.tag %>
<% end %>
<% end %>
Ruby on Railsのconfig設定
この記事ではRails6.1のconfig設定をメモしています。
##config/application.rb
タイムゾーンをローカルに設定する
“`ruby
config.time_zone = ‘Tokyo’
config.active_record.default_timezone = :local
“`##config/puma.rb
developmentではlocalhost:3000、productionではunix socketを使用する
“`ruby
if ENV.fetch(“RAILS_ENV”, “development”) == ‘production’
bind “unix://#{Rails.root}/tmp/sockets/puma.sock”
else
port ENV.fetch(“PORT”) { 3000 }
end
“`##config/environments/production.rb
キャッシュにredisを使用する
“`ruby
cache_servers = %w(redis://loc
不正な config/master.key が原因でRailsの起動に失敗するケースとその対処方法
## 発生する問題
git cloneでローカルに持ってきたRailsアプリを、`rails s`や`rails c`で起動しようとすると以下のようなエラーが発生する。
“`
$ rails s
=> Booting Puma
=> Rails 6.1.0 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
/Users/jnito/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/activesupport-6.1.0/lib/active_support/message_encryptor.rb:203:in `rescue in _decrypt’: ActiveSupport::MessageEncryptor::InvalidMessage (ActiveSupport::MessageEncryptor::InvalidMessage)
“`## エラーの原因
`c
SNS認証時のエラーについて
# 経緯
ウィザード形式のユーザー登録機能実装後、
SNS認証を追加するために
registrations_controller内に必要な記述をした。
(userモデルは記述済み。)“`ruby:controller
class Users::RegistrationsController < Devise::RegistrationsController #一部省略 def create if params[:sns_auth] == 'true' pass = Devise.friendly_token params[:user][:password] = pass params[:user][:password_confirmation] = pass end super #ここまでがSNS認証実装に追記した記述 @user = User.new(sign_up_params) #ここからウィザード形式のための記述 unles
Rails 検索機能の実装
# Rails で検索機能を実装
## View に form_tag で検索窓を設置
“`ruby
検索:
<%= form_tag(posts_path, :method => ‘get’) do %>
<%= text_field_tag :search, "", {class: "search_field_type"}%>
<%= submit_tag 'Search', :name => nil, class: “search_field_btn” %>
<% end %>“`
form_tag(posts_path, :method => ‘get’) の path の部分はクラス名によって任意に変更してください。
## Model に検索のためのメソッド search を設定
post.rb
“`ruby
def self.search(search)
if search
Post.where([“
【Ruby on Rails】Rails Tutorialを全部終えたので、追加で「ストック機能」を実装してみた
#はじめに
Railsで「qiita」のような記事をストックする機能を実装したので、その方法を備忘録としてまとめておきます。
(基本的にはいいね機能と同じやり方)※また、以下に記載する方法は前提として**「Rails tutorial」**を最後まで終えた程で記載させていただきます。
#実装すること
・記事をストックするボタンを作成する。
・記事がどれくらいストックされているか表示する。
・ストックした投稿をストック一覧ページで確認できるようにする。#Stockモデルを作成する
ストック機能を実装するにあたって、最初のステップとして`Stockモデル`を作成します。“`terminal
$ rails g model Stock
“`
カラムは2つ作成します。
・`post_id`カラム
・`user_id`カラム
マイグレーションファイルは以下のように修正します。“`ruby:xxxxxxxxxxxxx_create_stocks.rb
class CreateStocks < ActiveRecord::Migration[6.0] def chan