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

Rails関連のことを調べてみた2021年08月10日
目次

【Ruby on Rails】submitボタンにFontAwesomeのアイコンを表示する方法

#対象者

* form_withを使っている方
* submit btnをFontAwesomeで表示したい方

#目的

* FontAwesomeを使ってSubmitを表示する

#実際の手順と実例
###1.下記のように記載

““ruby
<%= form_with(model: [@article, @comment]) do |f| %>
<%= f.text_area :comment_content %>

#下記の部分
<%= button_tag type: "submit", class: "btn btn-default" do %>

<% end %>
<% end %>
“`

button_tag typeというメソッドを使っています。
これで、FontAwesomeのクラスを囲えば完成です。
問題なく投稿も行えます。

####投稿者コメント
FontAwesome多様するので今回やり方が全く分からず調べてみました。参考になれば幸いで

元記事を表示

別名の外部キーで紐付けたテーブルを結合する

調べてもぱっとわかる情報が見つからなかったので備忘録用に。

### 例えば
““user.rb
has_many :own_groups,
class_name: “Group”,
foreign_key: “owner_id”,
dependent: :destroy
““
““groups.rb
belongs_to :owner, class_name: “User”
““
というのがあったとする。

### コード
しかしjoinsするだけだとuserの情報を返してくれないのでselectする

““groups.rb
scope :with_owners_info, -> () do

.joins(:owner)
.select(”
groups.id,
groups.name,
groups.desc,
groups.updated_at,
users.id AS owner_i

元記事を表示

JSで連想配列の配列を任意のキーで並び替える【JavaScript】【Rails】

##したいこと
データベースから取ってきたデータをフロント(JS)で任意のカラムで並び変えて表示したい(APIに何回もアクセスしたくないため)

##コード
### JS
““JavaScript
export let sortItems = (items, sortType, order) => {
return items.sort((a, b) => {
if (order == “ASC”) {
return (a[sortType] < b[sortType] ? 1 : -1) } else { // DESC return (a[sortType] > b[sortType] ? 1 : -1)
}
})
}
“`
itemsは連想配列の配列。sortTypeはカラム名(連想配列のキー)。orderは”ASC”か”DESC”。
ただこのままだと更新日時で並び変えた場合に昇順と降順が逆になってしまうので、データを加工する
###Rails
Railsの場合

元記事を表示

【Rails】メモ: Concern内にプライベートクラスメソッドを書く

ActiveSupport::Concernモジュール内にプライベートクラスメソッドを書く際に少し詰まったのでメモしておきます。
`sample_class_method`はプライベートクラスメソッドとして扱うことが出来ます。

“`ruby
module Sample
extend ActiveSupport::Concern

included do
private_class_method :sample_class_method
end

class_methods do
def sample_class_method
puts ‘hello world!’
end
end

private

def private_instance_method
puts ‘hello world!’
end
end
“`

元記事を表示

[ActiveHash]今日のエラー

# はじめに
本記事では、本日体験したActiveHashに関するエラーを記述いたします。
ケアレスミスですが、今後も注意するべき問題でしたので、備忘録として残します。

# エラー紹介
早速ですが、エラーを紹介します。
とあるアプリケーションで、最終的な答えは以下の通りです。
ここについては、間違いはありません。
また、かなり省略していますが、コントローラーもビューもモデルも完成しており、
データを保存すること(createアクション)もできます。

“`ruby
class Claim < ActiveHash::Base self.data = [ { id: 0, name:'--'}, { id: 1, name:'着払い(購入者負担)'}, { id: 2, name:'送料込み(出品者負担)'} ] include ActiveHash::Associations has_many :items end ``` ```erb ~省略~ <% @items.each do |item| %>

  • 【条件分岐】商品が売却されていたら処理をする方法

    今回覚えたことをメモします。
    ◇実装内容
    商品購入機能後の条件分岐

    ◇結論◇
    ビューファイルに、「item.purchase」と記述をすると「商品に紐づく購入履歴」という形で処理をしてくれた。
    そこにif文を加えて「もし、その商品を購入していたら〜処理〜」とうい記述ができた。
    ※モデル名で名前は変わる。

    ↓は「もし、その商品を購入していたらSold Out!!を表示させる」

    “`perl:index.html.erb
    <% if item.purchase %>

    Sold Out!!

     <% end %>
    “`
    ◇前提◇
    2つはアソシエーションが組まれている
    商品情報:itemモデル
    購入履歴:purchaseモデル
     カラム:user_id
        :item_id

    ◇別の例◇
    ↓コントローラーに記述。before_actionメゾットで編集ページは商品が購入されたら、root_pathへ戻る形になる。

    “`perl:items_contr

  • 元記事を表示

    Herokuデプロイしたらレイアウトが総崩れした

    忘れないための備忘録!

    今回Herokuにデプロイした時に
    開発環境側で出来ていたレイアウトを確認したら
    レイアウトがぐちゃぐちゃになっていて
    唖然としました。

    Heroku上で動作する環境の仕様やアセットパイプラインの挙動が異なるため見たいです。

    野呂さんが自分が直面している問題の解決法を載せていてくださったので
    試してみたらすぐ解決。

    [Rails初学者がつまずきやすい「アセットパイプライン」]
    (https://www.transnet.ne.jp/2016/02/28/rails%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%8C%E3%81%A4%E3%81%BE%E3%81%9A%E3%81%8Dcolnr%E3%80%8C%E3%82%A2%E3%82%BB%E3%83%83%E3%83%88%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3/)

    ***Heroku上に反映するためには、2つの作業をすることが確実な方法。***

    ・本番環境上でアセットパイプラインを通るようにプ

    元記事を表示

    [Rails] 自作のアクションのルーティング設定(memberとcollection)

    ##はじめに
    検索機能の実装過程で新しい気づきがあったので記事に残しておきます。
    よろしくお願いします。

    ##自作のアクション

    ここではRailsの7つのアクションとされるもの以外に、自分で作ったアクションのことを「自作のアクション」と呼んでいます。

    今回検索機能を実装するにあたって、新たにコントローラーに「search」アクションというものを作成しました。

    “`ruby
    def search
    @tweets = Tweet.search(params[:keyword])
    end
    “`

    コントローラーの中にこんな感じで記述しました。
    モデルの方でこの中で使われているsearchメソッドは定義されていますが、今回は特に説明はしません。

    ##memberとcollection

    memberとcollectionはルーティングを設定するときに使用できる、URLや実行されるコントローラーを任意にカスタムできるものです。

    例えばmemberを使ってルーティングを設定すると下記のようになります。

    “`ruby
    Rails.application.route

    元記事を表示

    Rails の wrap_parameters は、controller からモデルを推測できる場合そのモデルにあるプロパティしか受け付けられない

    ## はじめに
    Rails の wrap_parameters の動きに想定外なところがあってハマりました。原因が分かったので、他の人が同じところにハマらないように、共有します。

    ## 先に結論
    wrap_parameters の処理は、controller からモデルが推測された場合、そのモデルにあるカラム **のみ** ラッパーする。

    “`rb
    # Post モデルに title と body カラムのみとする(created_at, updated_at もあるが本題と関係ない)
    # controller で下記のコードがある場合
    def post_params
    params.require(:post).permit(:title, :body, :auth_code)
    end

    # Post モデルに auth_code カラムがないため、実際のリクエストに auth_code 項目が送信された場合は、下記のようになる
    # オリジナルパラメータに auth_code 項目ありますが、ラッパーされた部分には auth_code 項目がありません!!!

    Proc

    元記事を表示

    RSpecでauthenticate_userを突破する

    ##前提
    ・以下にアクセスできるかテストしたい
    ・アクセス先でcurrent_userを用いた処理をしているため、サインインした状態でいたい

    “`
    hotel GET /hotels/:id(.:format) hotels#show
    “`

    ##やっていこう

    “`ruby
    #spec/rails_helper.rb
    RSpec.configure do |config|
    # テスト時にdeviseのヘルパーを呼び出すことができる => sign_inが使えるになる
    config.include Devise::Test::IntegrationHelpers
    # gemのベースであるwardenのプロキシサーバーのエラーが起こるための対処法
    config.include Devise::Test::ControllerHelpers
    end
    “`

    “`ruby
    #spec/controllers/hotels_controller_spec.rb
    require ‘rails_helper’

    RSpec.describe Hotel

    元記事を表示

    Rails 6 Herokuデプロイ時のエラー(Precompiling assets failed.)

    Herokuデプロイ中に起きたエラー

    “`sh
    methods since the “loose” mode option was set to “true” for @babel/plugin-proposal-class-properties.
    The “loose” option must be the same for @babel/plugin-proposal-class-properties, @babel/plugin-proposal-private-methods and @babel/plugin-proposal-private-property-in-object (when they are enabled): you can silence this warning by explicitly adding
    [“@babel/plugin-proposal-private-methods”, { “loose”: true }]
    to the “plugins” section of your Babel

    元記事を表示

    スケーラブルなフロントエンド開発 on Rails

    # はじめに
    Rails オンリーでのフロントエンド開発は、Vue.js や React と比べると、**型安全が得られないこと**、**コンポーネント指向ではない**等の理由からスケールしづらく、大規模開発には向いていない、と考えていました。

    一方で、SPA を使う理由が特に無い場合、Rails オンリーでの開発にはそれなりにメリットがあるとも考えていました。
    **技術要素が少なくて済む**こと、**ActionView の恩恵を受けて爆速で開発できる**こと等です。

    本記事では、**Rail には乗りつつ、スケーラブルにフロントエンド開発をするにはどうすればいいか**ということに焦点を当てて、いくつかの提案をします。

    # まず結論
    – CSS を可能な限り書かない → **Tailwind on Rails**
    – どうしても CSS を使いたいときは Scoped に書く
    – views / components / FormHelper の3レイヤーで考える
    – グローバルな CSS は 基本的な HTML 要素に限り使用可とする
    – ViewComponent

    元記事を表示

    FactoryBotを用いて紐づいたユーザーの登録

    User:Hotel = 1:多

    Hotelインスタンスは生成時にUserのIDがないと作成できません。
    そのため、user_idを直接書き込んで登録しようとしましたが、エラーになりました。

    上手くいかない原因は、紐付く親が存在していないからではないかと以下の記事のコメント欄には書いてありました。
    [rspecでエラーが出ます](https://teratail.com/questions/241395)

    ## 誤った書き方

    “`ruby
    # spec/factories/hotels.rb
    FactoryBot.define do
    factory :hotel do
    user_id {1}
    name {“ホテル名”}
    address1 {“東京都”}
    address2 {“千代田区XXX町X-X-X”}
    end
    end
    “`

    “`ruby
    # spec/models/hotel_spec.rb
    require ‘rails_helper’

    RSpec.describe Hotel, type: :model do
    de

    元記事を表示

    Rails の Dockerイメージを軽量化してみる

    鉄板すぎる話ですが、自分の手元で確かめたかったのでメモに残します。

    1. Alpine Linux を利用する
    1. RUN 命令などを削減する
    1. マルチステージビルド
    1. 全部盛り

    ## 何もしない状態

    [Docker ドキュメント](https://docs.docker.jp/compose/rails.html#id2) を参考に作成。

    “`Dockerfile
    FROM ruby:2.6.8
    RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
    RUN mkdir /app
    WORKDIR /app
    COPY Gemfile /app/Gemfile
    COPY Gemfile.lock /app/Gemfile.lock
    RUN gem install bundler:2.2.16
    RUN bundle install
    COPY . /app

    COPY dockerfiles/rails/entrypoint.sh /usr/bin/
    RUN chmod

    元記事を表示

    routes.rbにnamespaceを設定した際のコントローラーの対応

    Railsのroutesに以下のとおりnamespaceを追加設定した際に、それまで動いていたcontrollerが動かなくなってしまった。なお、コントローラのファイルは`app/controllers/api`配下に移動済み。

    “`ruby:routes.rb(変更前)
    Rails.application.routes.draw do
    resources :posts
    end
    “`

    “`ruby:routes.rb(変更後)
    Rails.application.routes.draw do
    namespace :api do
    resources :posts
    end
    end
    “`

    #事象
    namespace設定までは、例えば以下のURLへのGETに対し合致するデータをJSONで返していた。

    “`
    $ curl localhost:5000/posts/1
    “`

    namespace設定後はURLが変わるだけかと思っていたが、エラーを返すようになってしまった。

    “`
    $ curl localhost:5000/api/posts/1
    ~
    Ty

    元記事を表示

    Rails+Docker+MySQLのアプリをHerokuへデプロイする手順とエラーになったポイント

    この記事では、Herokuへのデプロイ手順と私が引っかかったエラーを書き留めています。
    説明不足、理解不足なところもあるかと思いますので、その際はご教授いただけると嬉しいです。

    バージョン

    • Rails 6.1.3
    • Ruby 2.6.8
    • MySQL 8.0
    • ストレージ AWS S3

    Herokuへのデプロイでエラーになったポイント

    最終的に以下の2つのポイントが原因でHerokuデプロイ時にエラーが出ていました。

    bundlerバージョンが違う

    Herokuではデフォルトのbundlerバージョンが指定されています。
    Gemfile.lockの末尾で確認できるBUNDLED WITHが
    2.〜の場合はbundler2.0.2が、
    1.〜の場合はbundler1.17.3が
    指定がない場合はbundler1.17.3のバージョンが使われます。
    私の場合、Ruby 2.6を使用していたため、bundlerバージョン1.17.2が入って

    元記事を表示

    【第10章】Railsチュートリアルでbcryptとfixtureについて忘れていたので復習した

    [Railsチュートリアル第10章(第6版)](https://railstutorial.jp/chapters/updating_and_deleting_users?version=6.0#code-friendly_forwarding_test)でhelper関連の演習が解けなかったので復習した。

    #①ヘルパー
    ・Railsのビューでは膨大な数の組み込み関数が使える。
    ・新しく作ることもでき、新しく作成したメソッドのことをカスタムヘルパーという。
    ・Webサイトのレイアウトで使うコンパクトなヘルパーメソッドでは、メソッド定義、変数割り当て、論理評価、制御フロー、文字列の式展開 など、Rubyの様々な要素が投入されている。
    ・デフォルトでは、ヘルパーファイルで定義されているメソッドは自動的にすべてのビューで利用できる。
    ・ヘルパーメソッドはテストから呼び出せない。

    #③まとめ
    ①で忘れていた箇所を思い出せた。

    元記事を表示

    【個人開発】エンジニアは全員サーフィンやるべきだと思ったので、サーフィンしながらタイピングできるサービスを作ってみた。

    # はじめに

    ![S5ZHskYu8cDwNqRz9V7n1628473413-1628473421.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/990592/a7e04000-a8d4-5abd-4405-dfce6e8d829a.gif)

    エンジニアやエンジニア志望の皆さん、最後に海に行ったのはいつですか?

    元々インドアで仕事や勉強をしがちで、コロナ禍もありよほど好きな人でなければ1年以上海に行ってないのではないでしょうか?

    申し遅れました、りゅうじと申します。

    【Twitter】

    [https://twitter.com/otokomigakimasu](https://twitter.com/otokomigakimasu)

    【今回作ったサービス】

    [https://surf-typing.herokuapp.com/](https://surf-typing.herokuapp.com/)

    サーフィンが好きでよく海に行く私は、普段インドアで仕事や学習を頑張っていらっ

    元記事を表示

    `require’: cannot load such file — rexml/document (LoadError)の対処法

    メイラーの機能をつけるためrails g mailerを実行して
    その後の工程を進めていき
    rails s
    サーバー起動しようと思い実行すると
    なんだか果てしないエラー文がお出まし^^;

    ***ターミナルエラー文一部抜粋***

    “`sh
    #~省略~
    `require’:cannot load such file — rexml/document (LoadError)

    #~省略~

    “`
    長文を読み解くと多分ここが原因かな…?と

    その後もいろいろrails コマンドを試しても
    全てrailsコマンドは死亡(全部エラー吐く

    これでエラーが出るようになるという事は
    毎回追加しないといけないgemっぽいのでメモ

    ***参考サイト***
    [記事](https://stackoverflow.com/questions/65479863/rails-6-1-ruby-3-0-0-tests-error-as-they-cannot-load-rexml)
    [gemサイト](https://rubygems.org/gems/rexml)

    Gemファイルに追記
    >g

    元記事を表示

    ruby on rails Windows10 64ビットインストール Railsサーバー起動までlocalhost:3000

    ruby on railsの設定方法について色々ぐぐったりしたけどほとんど間違っている内容だったので、正しいやり方を書きます。

    rubyのダウンロード
    https://rubyinstaller.org/downloads/
    ![Downloads.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/987832/27620a27-9adc-1ccf-f140-f0f5e0275483.png)

    # インストール#
    「Ruby+Devkit 2.7.4-1 (x64)」 です。
    最新版をインストールするのは辞めました。
    最新版が良いという方は最新版でやってみると良いかもしれません。

    WITH DEVKITを選ぶ理由はツールがまとめられてるからです。
    自分が使ってるWindows10が32ビットか64ビット数を間違えないように注意します。
    自分が使っているWindowsのビット数の確認方法は
    Windowsのシステムからビット数を確認できます。

    確認方法
    コントロール パネル\すべてのコントロール

    元記事を表示

    OTHERカテゴリの最新記事