【问题标题】:ActionMailer : NoMethodError in my_class#create undefined method `each' for nil:NilClassActionMailer : NoMethodError in my_class#create undefined method `each' for nil:NilClass
【发布时间】:2015-01-29 03:49:36
【问题描述】:

当我尝试通过电子邮件发送索引页面时,Actionmailer 会发送此消息: “nil:NilClass 的未定义方法‘每个’” 我想我只需要在我的控制器中传递正确的参数,我就是无法理解这一点。请帮忙!?

我的库存控制器:

def create

    @inventory = Inventory.new(inventory_params)
    if @inventory.save
      AppMailer.send_inventory(@inventory).deliver
      redirect_to inventories_path
    else
      render :new
    end
end

邮件类:

def send_inventory(inventory)
 @inventories = inventory
 mail to: inventory.email, from: "marvin8214@gmail.com", subject: "Last Month Sushi Bar Inventory - ITRBA"
end

邮件查看:

<div class="span5 well">
  <% @inventories.each do |inventory| %>
 <table>
    <tr>
      <td><%= inventory.name %> </td>
      <td><%= inventory.amount %> </td>
      <td><%= inventory.unit %> </td>
    </tr>
  </table>
 <% end %>
</div>

【问题讨论】:

    标签: ruby-on-rails ruby actionmailer actionview


    【解决方案1】:

    在 Mailer 类中,您传递 @inventory

    在邮件视图中,您正在访问@inventories

    如果您需要在视图中收集模型,则需要创建一个集合实例变量。

    更新

    邮件类:

    def send_inventory(inventory)
     @inventory = inventory
     mail to: inventory.email, from: "marvin8214@gmail.com", subject: "Last Month Sushi Bar Inventory - ITRBA"
    end
    

    邮件视图(erb 文件):

    Hi,
    Your inventory details:    
          <table>
            <tr>
              <td><%= @inventory.name %> </td>
              <td><%= @inventory.amount %> </td>
              <td><%= @inventory.unit %> </td>
            </tr>
          </table>
    Thanks
    

    【讨论】:

    • 但这只会调用单个项目,我需要传递我的模型的集合。我已将我的邮件更新为@inventories,仍然没有运气。
    • 当你打电话给send_inventory时你在传递什么?正如我所看到的,它是模型的一个对象(您刚刚创建的那个)。所以只是重命名它没有帮助。如果您想收集,请在您的 inventory_controller 中执行以下操作:@inventories = Inventory.all,然后调用 AppMailer.send_inventory(@inventory).deliver,但看不到您为什么要在 create 操作中这样做。
    • 我的目标是在点击保存时发送对象集合的电子邮件。这甚至可能吗?你会怎么写你的?
    • 你的控制器方法绝对是文件。我已经修复了其他人并更新了我的答案。这当然应该有效。如果您仍然有任何困惑,那么您的概念存在根本性的错误。请看一下。
    猜你喜欢
    • 2012-08-08
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多