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

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

【Ruby on Rails】コメント機能を初心者なりにまとめてみた(非同期)

#対象者

* コメント機能を実装予定の方
* 非同期通信(Rails×Ajax)を実装予定の方

#目的

* 記事へのコメントを非同期で投稿・削除ができるようにする

#実際の手順と実例
###1.前提

* jQueryの読み込みができている
* バージョン:Ruby:2.3.0、Rails:5.2.5です。
* Articleモデル、Userモデル実装済み

###2.モデルの作成とテーブル設定

まずコメントモデルを作成します。
UserとArticleとアソシエーションを組みます。

““
$ rails g model comment user:references article:references
““

その後、config/db/schema.rbにマイグレーションファイルが作成されているので、下記を追記していきます。

““`migration_file
class CreateComments < ActiveRecord::Migration[5.2] def change create_table :comments do

元記事を表示

Rails と SQL Server の組み合わせで DB ユーザーのパスワードを ‘#’ からはじまるものを使うと Rails アプリから接続できない

# 要約

記事タイトルのままですが、 DB ユーザーのパスワードを ‘#’ からはじまるものにしていると Rails アプリから DB に接続できません。

# 利用しているバージョン

– [CentOS](https://www.centos.org/): [7.6.1810](https://hub.docker.com/_/centos?tab=tags&page=1&ordering=last_updated&name=7.6.1810)
– [freetds](https://www.freetds.org/), freetds-devel: [1.1.20-1.el7.x86_64](https://centos.pkgs.org/7/epel-x86_64/freetds-1.1.20-1.el7.x86_64.rpm.html)
– [Microsoft SQL Server](https://www.microsoft.com/ja-jp/sql-server/sql-server-2019): [2019-latest](https://hub.docker.

元記事を表示

[Rails] 検索機能の実装

##はじめに
オリジナルアプリに検索機能を実装したので、簡単な仕組みを記事に残しておきたいと思います。

ソースコードはあくまで私のアプリから抜粋しているのでわかりづらいかもしれませんが、ご了承ください。

よろしくお願いします。

##検索フォームの作成
検索フォームはform_withを使って実装しました。
メソッドはgetで、“`local: true“`の記述は忘れずに記載します。

非同期で実装するときは“`remote: true“`となるのですが、form_withはデフォルトがremoteとなっていうので、記述する必要はないらしいです。

“`erb
<%= form_with(url: search_teachers_textbook_path(@teachers_textbook.id), remote: true, method: :get, class: "student-search-form") do |form| %>
<%= form.text_field :keyword, placeholder: "生徒を検索する", class: "

元記事を表示

【テストコード】「Mysql is not connected」というエラー

#今回の概要
**①テストコードを行う**
**②「MySQL client is not connected」のエラーが発生**
**③「sleep」を記述して解決**

##①テストコードを行う
*◇下記のテストコードを行うときにエラーが発生*

“`perl:purchase_shipping_spec
require ‘rails_helper’

RSpec.describe PurchaseShipping, type: :model do
before do
@user = FactoryBot.create(:user)
@item = FactoryBot.create(:item)
@p_s = FactoryBot.build(:purchase_shipping, user_id: @user.id, item_id: @item.id)
end
describe ‘商品購入機能’ do

〜テストコードは省略〜
end
end
“`
##②「MySQL client is not connected」のエラーが

元記事を表示

[Rails]7つのアクションとActiveRecordについて

# はじめに
本記事では、ActiveRecordについて記述しております。
コントローラーのアクション内で記述しているメソッド(all,find…etc)を
`なんとなく`記述していること状況を無くすため改めてアウトプットします。

# ActiveRecordとは
`モデル`が`テーブル操作`に関して使用できるメソッドです。
テーブルに情報を取得したり、保存したりするために使用することができます。
記述自体は`コントローラー`ですが、
モデルがテーブルに対してどのようなことを実行するのかを実行するのかを指定するものになります。

また、ActiveRecordはたくさんあります。
一つ一つどのような意味を持つのか理解をしなければ、意味が違うコードになってしまいますので、注意です。

## オーソドックスなメソッド
以下、よく使うメソッドを記述します。

|メソッド|意味|
|——–|——–|
|all|テーブルの全てのデータを取得|
|find|テーブルのレコード内の、ある1つのデータを取得|
|new|クラスのインスタンスやレコードを生成|
|save|ク

元記事を表示

railsが起動できない。→bashとzshについて

#はじめに

rbenvを使ってrubyをインストールし、rails sで起動したところ、エラーになってしまいました。

“`
$ rails s
Rails is not currently installed on this system. To get the latest version, simply type:

$ sudo gem install rails

You can then rerun your “rails” command.
“`

そもそもrbenvを使ってrailsを起動することに丸一日かけてエラーを解決したのに、
翌日rails sをするとまたエラーに…

#原因

原因は単純で、シェルを理解していないからでした。

rbenvインストール後、PATHを通すために.bash_profileという設定ファイルに下記を書き込みました。

“`bash
export PATH=”$HOME/.rbenv/bin:$PATH”
eval “$(rbenv init -)”
“`

しかし私のターミナルはデフォルトでzshになっていること

元記事を表示

遭遇したエラー集

#Rspec failure/error: user = factorybot.build(:user) keyerror: factory not registered: “user”の解決
###解決法
spec/models/factories/users.rbをspec/factories/users.rbにして解決
#no such file or directory @ rb_sysopen – public/user_images/1.jpgの解決
###解決法
publicにuser_imagesフォルダを作る。
#Mysql2::Error: Duplicate column name ‘image_name’の解決
###解決策
migrationファイルを空にする=>rails db:migrate=>成功=>元の通りの記述をする=>rails db:migrate
#Gemfileがないエラー(間違えて消してしまったとき)+command+Zでも元に戻らないとき
“`
$ bundle init
“`
上記の実行でGemfileが作られる=>インストールした

元記事を表示

Rails6で起動できない。webpackerをインストール

#はじめに

railsで新しくアプリケーションを作ろうとしたが、rails sでエラーに…

#webpacker,yarnをインストール

エラー文を読んでみると、webpackerを構成するファイルがないようです。

“`
$ rails s
=> Booting Puma
=> Rails 6.1.4 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
…..
(省略)
…..
Please run rails webpacker:install
“`

と書いてあるので実行。

“`
$ rails webpacker:install

Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/
Exiting!
“`

yarnをインストールする必要があるようです。

元記事を表示

cloud9でファイルを保存する際にFailed to write to ‘~~~~’が出た時に参考になったURL

![スクリーンショット 2021-08-10 13.38.30(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1824308/660bc386-2157-df51-6c74-422015a46879.png)

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/requesting-ebs-volume-modifications.html#elastic-volumes-limitations

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html

Cloud9が容量不足? EBSボリュームを拡張する方法を解説します!

https://zenn.dev/d0ne1s/scraps/2a83c362d097c0

元記事を表示

【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

    元記事を表示

    OTHERカテゴリの最新記事