スリ飯屋MaLankaのフリーエンジニアな日々

このブログでは、フリーランス5期目となる自身の実体験から、フリーランスエンジニアになるためのノウハウ、ブログや沖縄移住、スリランカの最新情報について発信します。

技術関連 - Rails

【Rails】開発環境のデータを本番環境(heroku)へ移動【seed_dump】

seed_dump というgemを使うとサクッと実現出来ます。 このgemは簡単にいうと、 DBのデータをseedファイルに超楽チンに書き出せるgem です。 本番環境の商品データを、 定期バッチでスクレイピングして貯めていこうかと思っていました。 が、スクレイピングは…

【Rails heroku】ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError

postgreSQL(herokuのデフォルトのDBはpostgreSQL) では、モデルのserializeメソッドが使えない ようです。 ActiveRecord::AttributeMethods::Serialization::ColumnNotSerializableError (Column `tags` of type ActiveRecord::ConnectionAdapters::PostgreS…

【Rails】DBに紐つかない属性(カラム)をモデルに追加する

Railsの標準機能である attribute API を使います。 attribute :virtual_tags, type: Array virtual_tagsという属性 に 配列の値 を保持させることが出来るようになります。 もし、typeを指定しない場合は、設定した値のclassで、値が設定されます。

【Rails】joinしたテーブルに対し、where句で特定の日付前後(以前以降)で絞り込みしたい

where句でテーブル名とカラム名両方を指定し、 文字列で条件指定すれば出来ました。 Model.joins(:join対象のテーブル名).where("join対象のテーブル名.join対象のテーブルにあるカラム名 >= ?", 日付) 例: ordersテーブルのorder_dateが、2020/01/20以降のU…

herokuで画像ファイルをassets/下に置いても認識されない

herokuではどうもassets/audios以下を読み込んでくれない。 そのため、Tempfile, Tempdirライブラリを使用し、 1. mp3ファイルをTempfileとして生成し、Tempdirに仮置き 2. S3にアップロード 3. 1のファイルを削除する という手順を取ることで対応出来ました…

【Rails】enum型でカラム名を定義すると、scopeが自動生成される

enum型でカラム名を定義すると、scopeが自動生成されます。 enumで定義したカラム名はそのまま、 モデル.enumで定義したカラム名 のようにする事ができます。 なので、 enumで定義したカラム名のscopeは自分で定義する必要はありませんし、 当然、whereを使…

【Rails】ファイルの作成日時順に、ファイルを並び替える File.mtime()

File.mtime() でファイルの作成日時が取れるので、それをsort_byで並び替える。

【Rails】viewでaタグを削除したい sanitize gem

sanitize gemを使います。 Sanitize.cleanメソッドに、オプションを渡します。 第二引数elementsの引数に、残したいタグを配列で指定することで、指定したタグ以外を削除出来ます。 # @hoge.textにはhtml文字列が入っているとします。 Sanitize.clean(@hoge.…

【Rails】配列でクエリパラメータを渡したい to_query

Railsで、 クエリパラメータを配列として渡したい場合は、 to_queryメソッドを使います。 `値.to_query(キー)` という風に使うと、 うまくクエリパラメータの形に整形してくれます。

【Rails】SymbolとStringの違いとenumについて

シンボル オブジェクトidが一意に振られる。一つのシンボルは常に同一のオブジェクト。なのでメモリの節約になる。 変更が加えられない(イミュータブル) class Symbol (Ruby 3.0.0 リファレンスマニュアル) ・文字列 オブジェクトidが毎回変わる。別のオブジ…

【Rails】audio_tagのsrc属性の値に + を含めるとエラーになる

調査していくと、srcの値に + が含まれているとエラーになることがわかった。 DateTimeにはタイムゾーンの +09:00 に +が含まれているのでエラーになる。 Dateには + が含まれていないので実行出来る。

【Railsチュートリアルでエラーが出た時のチェックリスト】

1. 文章を読み飛ばしていないか? 2. 応用問題を解いたままの状態で進めていないか? 3. サーバーを再起動 4. コマンド実行しているディレクトリ、gitのブランチは正しいか? 5. ifのend抜け、インデントの位置 6. その日は諦めて潔く寝る 7. こまめにコミット…

【Rails】htmlタグを削除する strip_tagsメソッド

ApplicationController.helpers.strip_tags(対象のhtml) を使えばOKです。

【Rails】コントローラーから、status204(no_content)を返す方法

head :no_content でOK。 head: :no_content ではないです! headにシンボルいりません。 つけてしまってて、ハマりました。。

【Rails5】viewでflashメッセージを動的に表示させる方法(コピペでOK!)

以下のコードを、application.html.erbのbodyタグの一番始め に設定すればOK。 " align="center"> bootstrapを導入していれば、alert-〇〇〇〇の部分に動的にcssが当たります。 bootstrapでcssを適用出来るflashの種類は、以下の4つ。 flash[:info] flash[:s…

【Rails5】form_withでhidden_fieldを使って、値を配列で送信したい

hidden_field_tag を使うことで対応出来た。 第一引数: name属性 第二引数: 送信したい値 例. = form_with url: '/articles' do |f| = hidden_field_tag 'hoge_item[]', 1 = f.submit '送信' これは下記のように送信されます。 #=> "hoge_item"=>["1"]

【Rails5】自作のディレクトリを、autoload_pathsに追加して自動読み込みさせる

application.rbの編集は、サーバーを再起動しないと反映されない。 Rails5から、本番環境でのautoloadが無効化されている。 Rails5のproduction環境でlib/配下のクラス読込みがNameErrorになるのはautoloadが無効化されたからだった - Qiita 若干厄介なのは…

【OGP設定】facebookシェア時のog:imageの設定が反映されない!

herokuにRailsアプリをデプロイし、facebookシェアボタンを設置。 が、シェア時のogp画像が上手く表示されない。 色々調べていると、 Dynoに書き込まれたファイルはアイドル状態、または再起動したときに消えてしまいます。永続化したいファイルはS3などのフ…

【Rails5】テーブルを作ったが、後からカラムにデフォルト値を設定したい時の方法

1. 修正用のマイグレーションファイルを作る。 2. 1で作成したマイグレーションファイルを以下のように修正。 3. db:migrateする これでデフォルト値が設定できました。 up,downメソッドではなく、 changeメソッドを使うと、 db:migrate:redoした時にエ…

【Rails5】フォームを読取専用にする方法

やり方はhtml内に :readonly => true を追加するだけ。 例 true %>

【Rails5】論理削除を有効にする方法

paranoiaのREAD.MEで、 paranoiaは非推奨になった旨が追記されています。 今後は 「discard」 を使うようにしましょう。 1、paranoiaというgemをインストール 2、モデルにdeleted_atというカラムを追加する 3、active_record.rbにacts_as_paranoiaと追記…

【rails5】db:migrate:resetでハマったメモ

db:migrate:resetは、dbを全て削除し、もう一度migrateを実行するコマンド。 resetすると、db:seedで作成していたユーザーも削除される。 テーブルにカラム追加(Add~テーブル部分はパスカルケース、頭文字だけ大文字で入力) $ rails g migration AddColumnT…

【ストロングパラメーターについて】

既存のフォームに、新たに「所属」入力フォームを追加し、値を送信しようとしたがバリデーションがかかって値を渡せず詰まったのでメモ。 質問をすると、 「ストロングパラメータってオチじゃないですか? rails tutorial 第7章 7.3.2を見ると何か発見がある…