今日もRailsで発生しやすい問題の対処方法を紹介です!
undefined method `*****’ for Class名::Base:Class のerrorが表示された場合の対処方法。
これはnil:classと出ていない場合はスペルミスの可能性が高いです。
Railsは優しくてこれじゃないの?というが候補が出てくるので正しい値に修正しましょう!
例えば下記の場合deliveryが正しいのでdeliveryに修正します!
`raise_dilivery_errors=' for ActionMailer::Base:Class
raise_delivery_errors= # eが正しい
ActionMailerで発生するActionView::MissingTemplate (Missing template ‘*****’ with {******の対処方法
MissingTemplateと表示される原因はViewファイルが見つからないために表示されます。
発生する可能性の高い原因としては
- ファイル名のファイルパスが正しくない
- ファイル名は正しいが拡張子が間違っている。.js.erb, .html.erb, .text.erbなど。
が考えられます。
ActionMailerの場合Rails 6でmail()を使用するとhtml.erbがデフォルトで動作します。
****.html.erbが正しいファイル名が設定されているか確認しましょう。
mail() do |format| format.html format.text end
と設定されているとtext.erbも探しに行きます。
ModelのAssociationを1対nではなく1対1で設定したい場合
1つのレコードに対して複数の評価がある場合、モデルファイルには以下のように記載していると思います。
belongs_to :book
has_many :rates
それに対して1つのレコードに対して1つの評価のみにしたい場合は
belongs_to :book
has_one :rate
とhas_oneを使います。
複数ではなく単一なので複数形の(-s)も消しましょう。
HTMLのIDは上から探して一番最初に見つかったものだけを取得する。
javascriptで書き換えたいときによく使う
<div id="object">
var obj = document.getElementById('#object');
やjQueryの
var obj = $('#object');
を使うことがあると思います。
この時、1つのHTMLファイルに同じIDが複数ある場合、先頭から探していき一番最初に見つかったものだけを使います。
なので、複数の同一オブジェクトをそれぞれ取得したい場合は
<div id="object-<%=book.id%>">
とユニークになるようにIDを設定してあげましょう。
もちろん取得するjavascript側も
var obj = document.getElementById('#object-<%=book.id%>');
や
var obj = $('#object-<%=book.id%>');
と記載する必要があります。
コメント