- 1. 【Ruby on Rails】コメント機能を初心者なりにまとめてみた(非同期)
- 2. Rails と SQL Server の組み合わせで DB ユーザーのパスワードを ‘#’ からはじまるものを使うと Rails アプリから接続できない
- 3. [Rails] 検索機能の実装
- 4. 【テストコード】「Mysql is not connected」というエラー
- 5. [Rails]7つのアクションとActiveRecordについて
- 6. railsが起動できない。→bashとzshについて
- 7. 遭遇したエラー集
- 8. Rails6で起動できない。webpackerをインストール
- 9. cloud9でファイルを保存する際にFailed to write to ‘~~~~’が出た時に参考になったURL
- 10. 【Ruby on Rails】submitボタンにFontAwesomeのアイコンを表示する方法
- 11. 別名の外部キーで紐付けたテーブルを結合する
- 12. JSで連想配列の配列を任意のキーで並び替える【JavaScript】【Rails】
- 13. 【Rails】メモ: Concern内にプライベートクラスメソッドを書く
- 14. [ActiveHash]今日のエラー
- 15. 【条件分岐】商品が売却されていたら処理をする方法
- 16. Herokuデプロイしたらレイアウトが総崩れした
- 17. [Rails] 自作のアクションのルーティング設定(memberとcollection)
- 18. Rails の wrap_parameters は、controller からモデルを推測できる場合そのモデルにあるプロパティしか受け付けられない
- 19. RSpecでauthenticate_userを突破する
- 20. Rails 6 Herokuデプロイ時のエラー(Precompiling assets failed.)
【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:installYarn 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
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::Concernincluded do
private_class_method :sample_class_method
endclass_methods do
def sample_class_method
puts ‘hello world!’
end
endprivate
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| %> Railsエラー初心者ActiveHash【条件分岐】商品が売却されていたら処理をする方法
今回覚えたことをメモします。
◇実装内容
商品購入機能後の条件分岐◇結論◇
ビューファイルに、「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