これに似た質問をしたところ、大きな助けがありました。理解と概念が明確になりました。actionmailer を使用するのはこれが初めてなので、理解を深めようとしています。
私が達成しようとしているのは、リマインドボタンをクリックしたユーザーにメールを送信することです。これは、ユーザーがチェックアウト、チェックイン、および本が再びチェックインされたときにリマインダーを要求できるシンプルな図書館アプリです.ロジックの最後の部分で苦労しています.より良い
そのため、書籍の check_out ステータスが変更されると、書籍モデルにさまざまな投稿が行われます
Check out
<%= form_for @book do |f| %>
<%= f.label :checked_out, "Check Book Out?" %>
<%= f.check_box :checked_out, {}, true %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :checked_out, :value => true %>
<%= f.submit 'Checkout' %>
<% end %>
Check In
<%= form_for @book do |f| %>
<%= f.label :checked_out, "Check Book Back In" %>
<%= f.check_box :checked_out, {checked: false}, false %>
<%= f.hidden_field :user_id, :value => nil %>
<%= f.hidden_field :checked_out, :value => false %>
<%= f.submit 'Check In' %>
<% end %>
Register Interest
<%= form_for @book do |f| %>
<%= f.label :remind_me, "let Me know when book back in" %>
<%= f.check_box :remind_me, {checked: false}, false %>
<%= f.hidden_field :remind_me, :value => current_user.id %>
<%= f.submit 'Remind Me' %>
<% end %>
私の本モデルでは、リマインダー要求が行われた後に本がチェックインされたときに、本が図書館に戻ったことをユーザーに通知する電子メールが送信されることを認識するためのこのロジックがあります
after_save :reminder_mailer
def reminder_mailer
if !self.checked_out && self.changes[:user_id] && self.user.nil?
ReminderMailer.remind_email(@user).deliver
end
そして私のアクションメーラー
class ReminderMailer < ActionMailer::Base
default from: "my email address"
def remind_email(user)
@user = user
mail(:to => user.email, :subject => "Library Clerk")
end
end
おそらくおわかりのように、リマインド リクエストを行ったユーザーのメールとして何を渡すかで苦労しています。リマインダ リクエストが行われると、users_id をリマインダ_me 列に投稿します。私は別のユーザーモデル(デバイス)を持っています..
users_id がリマインダー列に投稿されたとき、それは通常の整数であり、users_id にリンクされていないという問題がありますか?
アドバイスをいただければ幸いです