Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 让Actionmailer发送电子邮件_Ruby On Rails_Ruby On Rails 3_Actionmailer - Fatal编程技术网

Ruby on rails 让Actionmailer发送电子邮件

Ruby on rails 让Actionmailer发送电子邮件,ruby-on-rails,ruby-on-rails-3,actionmailer,Ruby On Rails,Ruby On Rails 3,Actionmailer,我问了一个类似的问题,并得到了很大的帮助,它澄清了一些理解和概念。这是第一次使用actionmailer,所以我正在努力获得更好的理解 我试图实现的是将电子邮件发送给单击“提醒我”按钮的用户。这是一个简单的图书馆应用程序,用户可以签出、签入并在图书签入时请求提醒。我只是在最后一部分逻辑上挣扎,一旦我看到它工作,我相信我会更好地理解它 因此,当一本书的签出状态更改时,该书模型会有各种帖子 Check out <%= form_for @book do |f| %> <%= f.

我问了一个类似的问题,并得到了很大的帮助,它澄清了一些理解和概念。这是第一次使用actionmailer,所以我正在努力获得更好的理解

我试图实现的是将电子邮件发送给单击“提醒我”按钮的用户。这是一个简单的图书馆应用程序,用户可以签出、签入并在图书签入时请求提醒。我只是在最后一部分逻辑上挣扎,一旦我看到它工作,我相信我会更好地理解它

因此,当一本书的签出状态更改时,该书模型会有各种帖子

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 %>
还有我的行动邮件

class ReminderMailer < ActionMailer::Base
default from: "my email address"

def remind_email(user)
@user = user
mail(:to => user.email, :subject => "Library Clerk")

end
end
类提醒器user.email,:subject=>“图书馆职员”) 结束 结束 正如你可能看到的那样,我正在为发出提醒我请求的用户的电子邮件传递内容而苦苦挣扎。当发出提醒我请求时,我将用户id发布到“提醒我”列。我有一个单独的用户模型(设计)

我的部分问题是,当用户id发布到提醒我列时,它只是一个常规整数,而没有链接到用户id


任何建议

您都可以创建一个
提醒
模型(以及数据库中的表格),用于跟踪用户设置的提醒

class Reminder < ActiveRecord::Base
  belongs_to :user
  belongs_to :book
end

class Book < ActiveRecord::Base
  has_many :reminders
end
您将拥有一个提醒控制器(仅向routes.rb添加
资源:提醒:[:创建]


注意:确保您添加了一个验证,即没有用户会向同一本书请求提醒。

我正在考虑使用一个单独的模型,这就是我要做的。只是为了我自己的确认,位于“提醒我”列中的id永远不会访问用户id,是吗?您不再需要
Book
模型中的
提醒我
列,如前所述,您将在db中为每个提醒创建一个
提醒
条目。您只需发送图书id,然后在控制器操作中使用
当前用户
。您是否介意解释提醒。创建(用户:当前用户,图书:@book),我会有一个提醒控制器?它会出现在创建操作中吗?抱歉不确定您的意思似乎有错误无法找到id为的书籍单击“提醒我”时,它在参数中传递了一个空白值?抱歉再次询问,请确保表单以正确的图书id作为隐藏字段呈现,然后检查服务器日志,查看包含图书id的参数的名称。
class Reminder < ActiveRecord::Base
  belongs_to :user
  belongs_to :book
end

class Book < ActiveRecord::Base
  has_many :reminders
end
<%= form_for @reminder do |f| %>
<%= f.label :remind_me, "let Me know when book back in" %>
<%= f.hidden_field :book_id, :value => @book.id %>
<%= f.submit 'Remind Me' %>
<% end %>
class RemindersController < ApplicationController
  def create
    @book = Book.find(params[:reminder][:book_id])
    Reminder.create(user: current_user, book_id: @book.id)
    redirect_to @book
  end
end
def reminder_mailer
  if !self.checked_out && self.changes[:user_id] && self.user.nil?
    # get all users waiting for a remind on this book
    @users = self.reminders.map(&:user)
    @users.each do |user|
      ReminderMailer.remind_email(user).deliver
    end
    # remove reminders as users have been reminded
    self.reminders.destroy_all
  end
end