获取可选参数在 rails 中不起作用

Fetch optional parameters not working in rails

我正在向方法发送可选参数,但没有收到。使用 binding.pry 我已经检查过,但未收到 link 参数,但在 send_email 方法中收到了 id 参数。它总是返回为 nil。请帮忙找出我哪里出错的问题

class EmailsController < MyAccountController
    def send_emails
      @user = current_user
      id = @user.id
      HiringMailer.send_email(id, link: true).deliver_now
    end
end


class HiringMailer < ApplicationMailer
  def send_email(id, joining = false, options={})
    link = options[:link]
    binding.pry_remote
    @user = User.find(id)
    @joining_user = joining
    to = (['abc@yah.com', 'adx@yah.com']).flatten
    mail to: to, subject: "Joining Date"
  end
end

更新 1

HiringMailer.send_email(id, link: true).deliver_now

def send_email(id, joining = false, , **options)
 binding.pry_remote
end

link: true 参数被 joining 变量吞没。

让我解释一下。这是方法签名:

def send_email(id, joining = false, options={})

现在,如果您调用该方法:send_email(123, link: true),那么我们最终会得到:

id = 123
joining = {link: true}
options = {}

为防止这种不必要的影响,您需要显式传递所有三个变量:send_email(123, false, link: true).

...但是等等,还有更好的方法! 改用关键字参数。您可以这样定义方法:

def send_email(id, joining: false, **options)

并像以前一样称呼它:

send_email(123, link: true)

唯一的 次要 区别(坦率地说,这是一个明显的改进)是,如果要设置 joining = true,您需要以稍微不同的方式调用该方法:

# Before:
send_email(123, true, link: true)

# After:
send_email(123, joining: true, link: true)