use*_*413 0 ruby ruby-on-rails ruby-on-rails-5
我正在向方法发送可选参数,但未收到它们。使用 binding.pry 我已经检查过但未收到链接参数,但在 send_email 方法中收到了 id 参数。它总是作为零返回。请帮忙找出我出错的地方
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
Run Code Online (Sandbox Code Playgroud)
更新 1
HiringMailer.send_email(id, link: true).deliver_now
def send_email(id, joining = false, , **options)
binding.pry_remote
end
Run Code Online (Sandbox Code Playgroud)
该link: true论点是越来越被吞噬joining变量。
让我解释。这是方法签名:
def send_email(id, joining = false, options={})
Run Code Online (Sandbox Code Playgroud)
现在,如果您使用: 调用该方法send_email(123, link: true),那么我们最终会得到:
id = 123
joining = {link: true}
options = {}
Run Code Online (Sandbox Code Playgroud)
为了防止这种不必要的影响,您需要明确传递所有三个变量:send_email(123, false, link: true).
...但是等等,还有更好的方法!改用关键字参数。您可以像这样定义方法:
def send_email(id, joining: false, **options)
Run Code Online (Sandbox Code Playgroud)
并像您之前所做的那样称呼它:
send_email(123, link: true)
Run Code Online (Sandbox Code Playgroud)
唯一的细微差别(坦率地说,这是一个明显的改进)是,如果要设置,则需要稍微不同地调用该方法joining = true:
# Before:
send_email(123, true, link: true)
# After:
send_email(123, joining: true, link: true)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |