获取可选参数在 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)
我正在向方法发送可选参数,但没有收到。使用 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)