【Ruby on Rails】Ransackなしで 簡単に検索機能を実装する方法
#対象者
* 検索機能の実装を考えている方
* Gemなしで検索機能を実装しようとしている方#目的
* 検索機能を実装して投稿を表示させる
#実際の手順と実例
###1.前提
* Rails 5.2.5
* UserモデルとArticleモデルを使用します
* 検索窓はヘッダーに設置
* 投稿した記事の検索結果をViewに表示します###2.Modelの設定
検索対象がArticleなのでArticleモデルに記述していきます。
ここが一番の肝です““article.rb
def self.search(search_word) #①
Article.where([“title LIKE(?) OR body LIKE(?) OR sub_title LIKE(?)”, #②
“%#{search_word}%”, “%#{search_word}%”, “%#{search_word}%”
end
““①search_wordを探すようにメソッドを定義しています。
さらにselfメソッドはオブ
画像投稿機能を追加するgem「CarrierWave」ruby on rails 写真アップロード機能
ここでは画像投稿機能を追加する方法について書いています。
Twitter風やInstagram風など、テキストだけではなく画像なども投稿する機能が欲しい場合は「**CarrierWave**」というgemを追加します。**環境**
>Windows10
>VS code
>ruby 2.7
>Rails 6.1.4**二つのgemを導入する**
ひな形の準備:scaffold
画像投稿機能:CarrierWave#まずはscaffoldというgemでモデルやコントローラー、ビューを一括で作成
railsではモデルやビューやコントローラなどを作る必要があります。
いちから作っていると面倒なので「scaffold」というgemを使います。
railsアプリケーションの開発をする際には、モデルやコントローラー、ビュー、ルーティングを作成していく必要があります。##modelsやviews、controllersの確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98783
railsでブックマーク機能を実装する時のざっくりの流れ
今後、お気に入りマーク(中間テーブル)をアプリに実装したい時に、この記事見れば全解決するじゃんってなるための記事です。
## 大まかな流れ
1. モデルを作成
2. ルーティングを設定する
3. コントローラーを追加する
4. アクションをビューに反映させるそれぞれ具体的に見ていきます。
## モデルを追加、編集
– 今回の難しいポイント
1. 一対多、多対多のイメージに苦しむ
2. バリデーションの書き方に苦しむ
3. モデル間のアソシエーションに謎のscopeが出てくるため、戸惑うまずは、お気に入り(Bookmarks)機能の[エンティティ](https://wa3.i-3-i.info/word11594.html)を作成していきます。
UserモデルとBoardモデルの中間テーブルとしての役割を果たしてもらうために、Bookmarksモデルを作っていきます。
ターミナルで、下記コマンドを打った後、マイグレーションファイル、モデルファイルを編集していきます。
“`jsx
$ rails g model Bookmark user:r
Railsチュートリアル[6版]8章|現在ログイン中のユーザーを返す処理について
Railsチュートリアルの8章のリスト1-6に出てきたログイン中のユーザーを返す処理について、特にコードを省略してる部分がわかりにくかったので自分用にまとめます。
“`ruby
module SessionsHelper
#渡されたユーザーでログインする
def log_in(user)
session[:user_id] = user.id
end#現在ログイン中のユーザーを返す(いる場合)
def current_user
if session[:user_id]
@current_user ||= User.find_by(id:user_id)
end
end
end
“`##ログイン中のユーザーを返す処理
まず、log_in(user)メソッド内の**session[:user_id]**という表現に戸惑いますが、sessionはRailsで事前に定義されているメソッドです。session[:user_id] = user.idを実行するとユーザー
jQuery導入
今回は、JavaScriptのjQuerykの導入のみの記事です!
ネットで調べても中々うまくできなかったので、、、※jQueryの導入には、jquery-railsというGemを利用することもあります!
今夏は違う方法です##◇jQueryをインストール
“`perl:ターミナル
% yarn add jquery
“`
##jQueryを管理化に
“`perl:config/webpack/environment.js
const { environment } = require(‘@rails/webpacker’)
const webpack = require(‘webpack’)environment.plugins.prepend(‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery’,
jQuery: ‘jquery’,
jquery: ‘jquery’,
})
)module.exports = environment
“`
##jQueryを認識させる??
“
RubyのGemについてのまとめ
#今回のテーマ
今回は、RubyのGemについて学んだことを投稿していきたいと思います。主に、gem,bundler,gemfileについて書いていきたいと思います。#gem
gemは、ログイン機能や検索機能など、便利な機能がパッケージ化されたRubyの外部ライブラリである。使用するには、インストールと読み込みが必要である。コマンドで以下を実行すると、gemをインストールすることができる。また、インストールしているgemの一覧を表示するには、gem listを使う。“`
gem install インストールしたいgem名
“`
実際にgem listを実行すると、以下のように自分のPCにインストールされているgemが表示される。“`
$ gem list
*** LOCAL GEMS ***actioncable (6.1.4, 6.1.3.2)
actionmailbox (6.1.4, 6.1.3.2)
actionmailer (6.1.4, 6.1.3.2)
actionpack (6.1.4, 6.1.3.2)
actiontext (6.1.4, 6.
Rails チュートリアル11章で「rails s」が起動しない
#開発環境
vscode
rails 6.0.3
ruby 2.7.4問題点
11.2.2の送信メールのプレビューでrails sを実行すると
“`ruby:ターミナル
/Users/username/environment/sample_app/config/environments/
development.rb:67:in `block in‘
: undefined method `config’ for ActiveSupport:Module (NoMethodError)
Did you mean? concerning
“`
というエラーが発生。テストは通っているのになぜ……。
#解決
調べてみてもいまいちわからなかったのでRails チュートリアルの[GitHub]
(https://github.com/yasslab/sample_apps/blob/master/6_0_0/ch11/config/environments/development.rb)
でソースコードを見くらべてみました。**エラーが出たコ
MVCモデルのまとめ
#今日のテーマ
CRUDアプリの基礎部分を作り終えたので、今回はMVCモデルについて学んだことを投稿していこうと思います。#MVCモデル
MVCモデルとは、ソフトウェア設計モデルの一つであり、プログラムの処理をModel,View,Controllerに分けて開発を行う方法のことである。
利点としては、役割別にすることで独立性が高くなり、依存性が少なくなることで、効率的なアプリケーション開発が行えることである。また、ある箇所の変更が他の要素に影響しにくくなるということも挙げられる。#MVCモデルの概要
MVCモデルでは、以下のようにデータが処理されます(自分でまとめたものです)。ざっくりまとめると、– ユーザーが、URLでアクセス
– ルーティングにより、必要なControllerに割り当てられる。
– Modelが必要なデータを取得する。
– 取得したデータをもとに、Viewを作成して、ControllerにHTMLを返す
– 生成したHTMLをユーザーに返す。![スクリーンショット 2021-08-17 14.51.35.png](https://qiita-i
grpc ruby の UInt64Value フィールドの使い方を凡ミスしてた
gprc ruby で、UInt64Value タイプのフィールドにnilを設定する時に以下のミスをしてた。
## 再現手順
“`proto
syntax = “proto3”;
package myapp.post;
option ruby_package = “PostPb”;import “google/protobuf/wrappers.proto”;
message GetLatestPostIdRequest {
uint64 user_id = 1;
}message GetLatestPostIdResponse {
google.protobuf.UInt64Value post_id = 1; /// 注目!
}
“`このprotoを使用して生成したgrpc rubyサーバーにおいて、post_idにnullを設定したいときに前者の方法で設定してしまっていた。
### case1 `post_id = nil` を与える場合
以下。`Google::Protobuf::UInt64Value.new`の出番はない。“`
deviseのメモ
##サインアップ、サインイン後のリダイレクト
“`application_controller.rb
#サインアップ
def after_sign_up_path_for(resource)
リダイレクト先のパス名
end#サインイン
def after_sign_in_path_for(resource)
リダイレクト先のパス名
end
“`##ログアウト
“`ビュー
<%= link_to 'ログアウト', destroy_user_session_path, method: :delete %>
“`##ログイン済ユーザーのみにアクセスを許可する
ログインが必要なコントローラに“`
before_action :authenticate_user!
“`##ログインしているかの判定
ログインしていれば、True
していなければ、Falseを返す“`
user_signed_in?
“`
deviseの導入
##gemfileにdeviseを追加
“`gemfile
gem ‘devise’
“`##bundleをインストール
“`
$ docker-compose run web bundle install
“`gemfileが変更されたので、buildする
“`
$ docker-compose build
“`##deviseをインストール
“`
$ docker-compose run web rails g devise:install
“`##モデルの作成
“`
docker-compose run web rails g devise モデル名
“`##アラートの表示
bodyタグ内に“`application.html.erb
<%= notice %>
<%= alert %>
<%= yield %>
“`##deviseのビューの作成
“`
docker-co
[Ruby] Array#sum メソッド
##はじめに
sumメソッドってすごく馴染みがあるように思っていたんですが、使い方をみたら、全然使ったことなかったと思いまして、簡単に記事にまとめておこうと思います。##sumメソッド
配列に対して使います。配列に入っている要素を全部がっちゃんこしてくれるイメージ。
“`ruby
[1, 2, 3, 4].sum
=> 10
“`> 引数に明示的に指名すると数値以外にも使用できます。
https://docs.ruby-lang.org/ja/latest/method/Array/i/sum.htmlなかなか表現が思いつかなかったのでリファレンスの表現をお借りします。
“`ruby
[“お”, “は”, “よ”, “う”].sum(“”)
=> “おはよう”[[1], [[2]], [3]].sum([])
=> [1, [2], 3]
“`
ruby on railsでのユーザー管理機能について
この記事ではruby on rails 6.0.0を使用しています。!
今回はdeviseのgemを紹介したいと思います。
deviseって何?
devisとはユーザー管理機能を実装するためのgemです。
会員登録やログイン・ログアウト機能を簡易に実装することができるgemです。!導入方法
導入は簡単です。!
![05ca375321ad0851c0be9c6b3a07691b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1902434/e791767e-878d-e529-cc2d-c73d9f4d8fab.png)
Gemfileに gem ‘devise’ と記述してbundle installをするだけです。!!
【Ruby on Rails】新規登録時のエラーメッセージ発生後にリロードするとルーティングエラーになる問題を解決した話
#解決したい課題
* 新規会員登録時に、エラーメッセージ表示後に、リロードすると発生するRunningErrorを解決したい
#結論
* [GET]/userを呼び出していたので、そのまま入力する
#原因と対策
###1.エラー文![スクリーンショット 2021-08-17 8.40.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/6c8a0029-314c-1447-0b3c-ab116be75de3.png)
###2.rails routesルーティング確認
![スクリーンショット 2021-08-16 21.41.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/47f20649-a8ae-9aad-1232-c1f9586a167b.png)
そもそもGETがない、、、!
###3.routes.rbに記載
resourcesを使っていたのでi
Railsチュートリアルmodule SessionsHelperを例にmoduleとHelperの役割を見てみる
Railsチュートリアルも9章に入ったのですが、Sessionが出てきてからかなり難易度が上がったように感じたので、知識の定着を図ることも兼ねて、理解が曖昧な部分を自分用にまとめておきます。
##module SessionsHelperとは
Sessionコントローラーを生成した時点で、自動的にmodule SessionsHelperも生まれてました。
まず、**module**というのはclassと同様に部品の集まりです。以下の説明がわかりやすいと思います。
>Rubyにはオブジェクト指向で一般的なクラス以外にも、モジュールという概念が存在します。モジュールではクラスと同じように定数やメソッドをまとめたり、クラスに組み込んで多重継承を実現したり、クラスなどをまとめることで名前空間を提供するなど、いろいろな使い方ができます。 https://qiita.com/shiopon01/items/fd6803f792398c5219cd
ちなみにクラスとモジュールの違いに関する説明は[こちら](https://qiita.com/fukumone/items/2dd4d2d1
Ruby組み込み変数一覧
## 組み込み変数
| 変数名 | 内容 |
| —————- | ———————————————————– |
| $! | 最後に発生した例外に関する情報 |
| $” | $LOADED_FEATURESの別名 |
| $$ | 現在実行中のRubyのプロセスID |
| $& | パターンマッチングでマッチした文字列 |
| $’ | パターンマッチングした部分より後ろの文字列
Ruby 配列の基本的な使い方
#配列とは
簡単にいうとデータのかたまりのことです。
つまり***データをたくさん詰められるタンスのような役割***をしています。
そして、データ1つ1つは箱のようなもので、***要素***と呼んでいます。例えば、「前田」・「佐藤」・「鈴木」という名前(文字列)を格納する配列のイメージは下の図のようになります。
箱1つ1つには番号が振られていて、この番号を***添字***と呼んでいます。添字は0から始まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/14382a27-7fa8-c6cd-f855-2453d3b725d3.png)
*こちらのサイトを参考
#配列の生成と定義
⚫︎配列の生成
“`
array = Array.new #arrayは配列のこと #Arrayは配列を表すclass
array = [
【Rails】どうしてもjoinsできなかったので、苦肉の策で無理矢理joinsさせた
joinsをどうしてもしたかった
userとfoodとorderという三つのDBテーブルのうち、foodとorderをjoinsさせて、フロントに持っていきたかったのですが、どうしても二つのテーブルのデータが同時に取得できなかったため、無理矢理joinsさせた愚行をここに記していきます。
念のため、モデルの関係性は以下です。
foodとorderは1対nの関係です。“`user.rb
has_many :foods
has_many :orders
“`“`food.rb
belongs_to :user
has_many :orders,foreign_key:”id”,primary_key: “id”
“`“`order.rb
belongs_to :make_user,class_name: “User”, optional: true
belongs_to :order_user,class_name: “User”, optional: true
belongs_to :food, foreign_key:”food_id”,opt
gRPC ruby の`Google::Rpc::Status.decode`の挙動
この記事は手元でコードを動かしながら書いているわけではなく、ただ調べたことをざっとまとめているだけである。よって、何かミスってるかも。「スニペットでto_protoで、なぜわざわざprotoにリバースしてるんだ」的なツッコミもなしで。あくまで、`Google::Rpc::Status.decode(シリアライズされたリクエスト)`の挙動を見せるのがこの記事の目的だからリバースしてます。
## gRPC ruby の クライアント側で、
“`rb
client = GetPostsService::Stub.new(‘localhost:5005’)begin
post_response = client.get_posts(
GetPostsRequest.new(param)
)
puts(
Google::Rpc::Status.decode(post_response.to_proto) ## ここ
)rescue G
[Ruby] digitsメソッド
##はじめに
RubyでAtCoderを解いていたときに、便利なメソッドを見つけたので記事にしておきます。
よろしくお願いします。##digitsメソッド
digitsメソッドはinteger型に用意されているメソッドで、桁ごとの数字を一つずつ配列の中に入れてくれるメソッドです。正の整数に使うことができます。
例えば、1234という数字があったとします。これにdigitsメソッドを使うと↓
“`ruby
1234.digits
=> [4, 3, 2, 1]174893.digits
=> [3, 9, 8, 4, 7, 1]
“`また、digitsに引数を渡すことができます。引数を渡した数字を基数として、その記数法で表記した数値を配列に一つずつ入れます。
つまり引数を渡さなかった場合(上記の例)、基数は10となっています。“`ruby:引数を渡した場合
16.digits(16)
=> [0, 1]3.digits(2)
=> [1, 1]
“`この辺は進数の理解が必要ありますね。