Ruby関連のことを調べてみた2021年09月02日

Ruby関連のことを調べてみた2021年09月02日
目次

真:Sorceryで複数モデルを扱う

ユーザと管理者で Model をわけたいと考えて以下の記事を参考にしました。

https://qiita.com/mzmt/items/cbc2e4f2a51ded97db83

`current_user`をオーバーライドしても、`login`などは適切に動きません。

ログを見ると `config` で指定していた `user_class`でログイン処理が走ります。

ソースコードを追っかけてみると・・・

“`ruby:sorcery-0.16.1/lib/sorcery/controller.rb

module Sorcery
module Controller

module InstanceMethods

# Takes credentials and returns a user on successful authentication.
# Runs hooks after login or failed login.
def login(*credentials)
@current_user =

元記事を表示

プロフィールにタグを表示する

現在投稿系のアプリを作成してまして、その時にプロフィール画面のデザインで結構悩みました
結果としてはあまり欲張りすぎずにシンプルなデザインにすることで見やすいし、実装もし易くなりました。

欲張っていろいろ詰め込んでも見にくいだけですしね笑

それでも完全に手抜きで作るのではなくて自分なりにあったらいいなと思うのを探してみました。

    ・ユーザーアイコン
    ・ニックネーム
    ・自己紹介文
    ・好きなものを#で表示
    ・編集

正直これくらいしか思いつかなかったです、、、、笑

実装していきます

#の機能以外はそこまで苦戦しなかったのでコード貼っておきます

使っているgemです

  • ・devise(userのログインとか新規登録とかめっちゃ簡単にできます)
  • ・carrierwave(画像のupするので使いました)
  • ・mini_magi
  • 元記事を表示

    [Rails]フォローしたユーザーの直近1週間の投稿のみ表示させる

    # はじめに
    本日は、過去にフォロー機能を実装していたので、
    せっかくなので、アプリケーションっぽくトップページには、
    フォローしているユーザーのみの投稿を表示させるようにしました。

    # コード
    コントローラー

    “`ruby
    def index
    @foods = Food.order(“created_at DESC”).where(user_id: [current_user.id,*current_user.following_ids])
    @like = Like.new
    @ranks = Food.find(Like.group(:food_id).order(‘count(food_id) desc’).limit(5).pluck(:food_id))
    end
    “`

    ビューは特に見せるところはないので割愛します。
    eachメソッド使ってとりあえずまずは全部の投稿を出すようにすれば良いと思います。

    `order(“created_at DESC”)`
    新しい投稿が上になるように設定。

    `where(user_id: [current

    元記事を表示

    [コーディングスキル] アウトプット用メモ

    # 用途

    コーディングスキルを磨くために、随時用語を纏め内容を理解するのが目的です。

    ※50音順に纏めていきます

    # 除数
    除法(割り算)で、割るほうの数。

    # 被除数

    除法(割り算)で、割られるほうの数。

    # フィボナッチ数列

    フィボナッチ数列は、「2つ前の項と1つ前の項を足し合わせていくことでできる数列」
    プログラミング言語の実装では、再帰的処理の例としてよく紹介されています。

    “`
    1,1,2,3,5,8,13,21…

    “`

    n番目の数(n-1)番目と(n-2)番目の数の和からなっている数列。

    元記事を表示

    Ruby puts print pの違い

    Rubyで出力する時に使うputs p  printの違いをそれぞれ見ていきましょう。

    #putsの特徴

    1 改行する
    2 配列では要素の順番に出力する
    3 戻り値はnil
    4 一般ユーザーが使う
    5 呼び出すメソッドはto_sによって文字列に変換

    “`rb

    “`

    #printの特徴

    1 改行しない
    2 戻り値はnil
    3 呼び出すメソッドはto_sによって文字列に変換
    4 一般ユーザーが使う

    #pの特徴

    1 改行する
    2 戻り値は引数で配列で返す
    3 オブジェクトの情報をわかりやすく出力
    4 デバック用(開発者用)に使う
    5 呼び出すメソッドはinspectによって文字列に変換

    #それぞれの違いのまとめ
    それぞれ違いがありますが特にputsとpがわかりづらいかと思います。

    下の参考記事からの引用します。
    printは、“`引数を文字列にして出力し、改行をいれません。“`
    putsは、“`引数を文字列にして出力し、改行をいれます。“`
    pは、“`引数を読み取りやすい形式で出力し、改行をいれ、デバッグでよく使用します。“`

    上の3つを押さえ

    元記事を表示

    WebpackerでHotReloadは動くが、コンパイル結果が反映されない

    # はじめに

    最近は仕事でWebアプリケーションを作成しています。
    本日もいつも通りWebページを作成し、Javascriptを書いたのですが、なぜかリロードしてもJavascriptが反応しませんでした。
    色々調べたのですが、同じ現象の方がいなかったようなので、簡単にメモしていきます。

    また、この解決に会社の上司の方が手助けをしてくれました。
    タイトルも上司の方につけていただきました。

    # 環境

    – Docker Desktop for Windows
    – WSL2
    – VSCode

    # 問題
    Docker(WSL2)環境で以下の問題がいきなり発生しました。

    ローカルとコンテナをマウントしている状態で、JavaScriptのファイルを編集しましたが、なぜか反映さません。

    JavaScriptは`webpacker`のコンテナをDockerで立ち上げて管理しています。
    JavaScriptを編集した後に保存(Ctrl+s)をすると、ホットリロードが働いていることはターミナルから確認ができます。

    そして、ターミナルではCompling….と走っていました。

    しかし、

    元記事を表示

    [Ruby] AtCoder過去問 B – Card Game for Two

    ##はじめに
    AtCoderのB問題をRubyで解いて見ました。
    いろんな考え方や書き方が自分の中でもたくさんあって、どの書き方を記事にしようか迷いましたが、一番自分がわかりやすいコードを載せることにしました!

    よろしくお願いします。

    問題は以下から確認してください。

    https://atcoder.jp/contests/abc088/tasks/abc088_b

    ## B – Card Game for Two

    まずは入力受け取りの記述を書きます。

    “`ruby
    n = gets.to_i
    points = gets.split.map(&:to_i)
    “`

    続きまして、2行目で受け取った配列の順番を後々、処理がしやすいように降順に並べ替えます。
    sort.reverseを使います。この使い方は以前記事にしていますのでそちらも見ていただければと思います。↓

    https://qiita.com/minhee/items/c5897831ed718ee6011b

    こちら、破壊的メソッドではないのでもう一度pointsに入れ直すような書き方をしておきます。
    これで

    元記事を表示

    【Rails】投稿カテゴリ機能(メモ)

    # 目標
    * カテゴリ機能の実装

    # 環境
    * Rails: 6.1.3
    * ruby: 3.0.0
    * mac: OS

    # 前提
    * 簡易的なTodoApp
    * 投稿機能実装済

    # 実装
    #### `category`モデル作成

    “`ruby:ターミナル
    $ rails g model Category name:string
    “`
    マイグレーションファイル生成。

    “`ruby
    class CreateCategories < ActiveRecord::Migration[6.1] def change create_table :categories do |t| t.string :name t.timestamps end end end ``` ```ruby: $ rails db:migrate ``` ####postテーブルにカテゴリカラムを追加 ```ruby:ターミナル $ rails g migration AddCategoryIdToPosts category_id: int

    元記事を表示

    public private protected の違いを調べてみた。(備忘録)

    ##それぞれの違いを簡単にまとめてみる。
    |メソッド|呼び出し可能範囲|
    |——|————————-|
    |public|クラス内外**どこからでも**呼び出し可能。|
    |private|クラス、同じインスタンス内から**のみ**呼び出し可能。|
    |protected|クラス、同じインスタンス内に**加え、**同じクラスの他のインスタンスからも呼び出し可能。|

    rubyのデフォルトが、publicで他の二つとの違いは、わかりやすいのですが、他の2つ(privateとprotected)の違いがよくわからなかったので調べてみました。

    ##privateとprotectedの具体的な違いを調べてみた。

    * private
    privateメソッドを呼び出す時は、レシーバは指定**できない**。
    * protected
    protectedメソッドを呼び出す時は、レシーバは指定**できる**。

    この***呼び出し時にレシーバを指定できるかできないかの違い***がこの2つを理解する**ポイント**になります。

    :::note info

    元記事を表示

    今が特定の時間範囲内かどうやって判断する?(システム運休期間とか)(リファクタリング)

    ## やりたいこと
    現在時刻が特定の時間範囲内かどうかをスマートに判断したいです。
    例えば、特定の時間帯、ユーザーグループごとシステムへのアクセスや一部機能を制限するのに使えるかと思います。

    今日も弊社先輩のリファクタリングに息を呑んでしまったのでメモメモ。

    Modelは例えばこんな感じ↓
    suspension(一時停止)の期間を持たせています。

    “`ruby
    # == Schema Information
    #
    # Table name: user_groups
    #
    # id :bigint not null, primary key
    # name :text not null
    # description :text
    # created_at :datetime not null
    # updated_at :datetime not null
    # suspe

    元記事を表示

    rails serverした時に(ActiveRecord::ConnectionNotEstablished Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2))と出る時の対処法

    # やりたいこと
    rails s時ブラウザに出るエラーを消したい
    ※この記事では、MacOS Xを使用しています。
    # 問題
    rails sしたら以下エラーがブラウザに表示

    ~~~
    ActiveRecord::ConnectionNotEstablished
    Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
    ~~~

    # 原因
    調べると
    ・mysql.sockファイルがない
    ・pidファイルがない
    ・pidファイルに適切な権限が設定されていない

    この3つを対処します
    ※mysql.sockを作成したらサーバー起動できる場合もあるようですが、私の場合は3つやって解決できました
    # 解決策
    mysql.sockがないので作成

    ~~~
    $ sudo touch /tmp/mysql.sock

    ~~~
    mysql再起動

    ~~~
    $ sudo mysql.server restart

    ~~~
    今度はpidファイルがないと言われた

    ~~~
    $ sudo mysql.server resta

    元記事を表示

    【Ruby on Rails】exists?とpresent?って何が違うの???

    #前置き

    ランキング機能を実装中
    ![スクリーンショット 2021-09-01 8.49.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/c000da44-9497-dfef-690b-f13d203f9d49.png)

    サーバー立ち上げたら下記の箇所で怒られた
    ![スクリーンショット 2021-09-01 8.50.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/2c939647-eb8a-8f06-efc3-26d5333414b0.png)

    exists?じゃダメなの????

    適当に知っているメソッドを入れているとpresent?だと問題なく稼働した。理由がわからなかったので、2つのメソッドになんの違いがあるか調べてみた。

    #目的

    * 2つの違いをはっきりさせる

    ###1.結論

    * **データベースからデータを取得する前か後かで違う**
    * **データベー

    元記事を表示

    [jQuery]ランキングしたものをslickで表現する

    # はじめに
    本記事では、slickを用いた記述をいたします。
    `slick`はjQueryベースのスライダーを作成するための`プラグイン`です。

    # コード
    いろんなサイトやYouTubeの動画を参考にしましたが、
    `CDN`を使用するのが一番良いなという結論に至っています。
    (ファイル保存とか色々グダってトラウマ)

    “`erb


    省略


    <%= yield %>