ruby 你好,我正试图建立一个时事通讯使用行动邮件,不幸的是,当我试图向每个注册用户发送电子邮件时,我被卡住了

wydwbb8l  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(170)

预览不工作,并不断得到不同的错误。
我的schema.rb看起来是这样的

ActiveRecord::Schema[7.0].define(version: 2022_12_31_110010) do
  create_table "users", force: :cascade do |t|
    t.string "emailadress"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end

字符串
我的用户模型看起来像这样:

def send_daily
    users = User.all(params[:id])
    users.each. do |user|
      UserMailer.send_daily_newsletter(user).deliver_now
    end
    redirect_to root_path, notice: 'Newsletter envoyée.'
end


我的User.Mailer看起来像这样:

class UserMailer < ApplicationMailer
      def send_daily_newsletter(user)
      @user = user
      mail(to: @user.emailadress, subject: 'Votre fait historique quotidien')
     end
    end


我的邮件预览看起来像这样:

class UserMailerPreview < ActionMailer::Preview
  def send_daily_newsletter
    user = User.all # Ou tout autre utilisateur de votre choix pour la prévisualisation
    UserMailer.send_daily_newsletter(user)
  end
end


我不断得到以下错误:

undefined method `emailadress' for #<ActiveRecord::Relation [#<User id: 14, emailadress: "thomasandrieu1997@gmail.com", created_at: "2023-07-02 10:32:46.657533000 +0000", updated_at: "2023-07-02 10:32:46.657533000 +0000">, #<User id: 15, emailadress: "than1544@colorad.edu", created_at: "2023-07-02 11:43:17.121218000 +0000", updated_at: "2023-07-02 11:43:17.121218000 +0000">]>


你们有什么建议,我应该改变,以便能够在预览中正确地可视化电子邮件?谢谢你!

mf98qq94

mf98qq941#

你在UserMailerPreview中得到这个错误,因为你把User.all分配给user,这意味着你传递了一个ActiveRecord::Relation,而不是一条记录给你的新闻通讯方法。在你的邮件中这一行是失败的:mail(to: @user.emailadress, ...
要解决此问题,请更改

class UserMailerPreview < ActionMailer::Preview
  def send_daily_newsletter
    user = User.all # Ou tout autre utilisateur de votre choix pour la prévisualisation
    UserMailer.send_daily_newsletter(user)
  end
end

字符串

class UserMailerPreview < ActionMailer::Preview
  def send_daily_newsletter
    user = User.first # or `last` or `find(1)` or any other method returning a single user
    UserMailer.send_daily_newsletter(user)
  end
end


你需要解决的另一个问题是控制器中的方法(?):

def send_daily
  users = User.all(params[:id])
  users.each. do |user|
    UserMailer.send_daily_newsletter(user).deliver_now
  end
  redirect_to root_path, notice: 'Newsletter envoyée.'
end


User.all(params[:id])引发错误,因为all方法不接受参数。它应该只是User.all,而没有params[:id]

0dxa2lsx

0dxa2lsx2#

您在以下行中遇到问题

class UserMailerPreview < ActionMailer::Preview
  def send_daily_newsletter
    user = User.all # Ou tout autre utilisateur de votre choix pour la prévisualisation
    UserMailer.send_daily_newsletter(user)
  end
end

  class UserMailer < ApplicationMailer
      def send_daily_newsletter(user)
      @user = user
      mail(to: @user.emailadress, subject: 'Votre fait historique quotidien')
     end
    end

字符串
在UserMailerPreview中,你有user = User.all,它会给予你所有的用户,现在如果你使用user.emailaddress,它会引发错误,因为user用户列表,该列表没有电子邮件地址。
如果你循环通过它,那么你将得到电子邮件地址。
当你希望从数据库中得到多个结果时,最好使用复数作为变量名。
试着使用下面的方法来解决你的困惑users = User.all

相关问题