Ruby 如何使用 yield 调用 class setter
Ruby how to call a class setter with yield
我能够让我的代码正常工作,但我不喜欢它在语法上的工作方式 - 不确定这是否是一个词。
我目前的代码:
user.set_phone(phone) do
message = "Verify your phone number #{@host}/phone/verify?id=#{user.id}&code=#{user.phone_verification_code}"
CoreIntegrations::Sinch.send_text(message, phone)
end
我希望如何 look/work:
user.phone=(phone) do
message = "Verify your phone number #{@host}/phone/verify?id=#{user.id}&code=#{user.phone_verification_code}"
CoreIntegrations::Sinch.send_text(message, phone)
end
这是我遇到的错误
/Users/christianjuth/Desktop/apollo-8/app/controllers/application_controller.rb:140: syntax error, unexpected keyword_do, expecting keyword_end /Users/christianjuth/Desktop/apollo-8/app/controllers/application_controller.rb:267: syntax error, unexpected keyword_end, expecting end-of-input
行号可能与 repo 同步,以防我对应用程序控制器进行了一些本地更改。
...或者类似的东西。 user
是一个 ActiveRecord 模型。我想这样做的原因是,仅当发送到 user.phone=
的变量 phone
与 user.phone
的现有值不同时,yield 才会被调用。
我认为这更多是语法问题,但以防万一 here is repo 的上下文。您正在查看的代码位于 app/controllers/application_controller.rb
中,用户模型可以在 user/models/user.rb
.
中找到
更新:我在调用 setter 时遇到问题,而 yield 没有定义它。抱歉造成混淆。
如果您将方法从 def set_phone
更改为 def phone=
那么将更难调用,但仍有可能:
user.send :phone=, phone do
# ...
end
我能够让我的代码正常工作,但我不喜欢它在语法上的工作方式 - 不确定这是否是一个词。
我目前的代码:
user.set_phone(phone) do
message = "Verify your phone number #{@host}/phone/verify?id=#{user.id}&code=#{user.phone_verification_code}"
CoreIntegrations::Sinch.send_text(message, phone)
end
我希望如何 look/work:
user.phone=(phone) do
message = "Verify your phone number #{@host}/phone/verify?id=#{user.id}&code=#{user.phone_verification_code}"
CoreIntegrations::Sinch.send_text(message, phone)
end
这是我遇到的错误
/Users/christianjuth/Desktop/apollo-8/app/controllers/application_controller.rb:140: syntax error, unexpected keyword_do, expecting keyword_end /Users/christianjuth/Desktop/apollo-8/app/controllers/application_controller.rb:267: syntax error, unexpected keyword_end, expecting end-of-input
行号可能与 repo 同步,以防我对应用程序控制器进行了一些本地更改。
...或者类似的东西。 user
是一个 ActiveRecord 模型。我想这样做的原因是,仅当发送到 user.phone=
的变量 phone
与 user.phone
的现有值不同时,yield 才会被调用。
我认为这更多是语法问题,但以防万一 here is repo 的上下文。您正在查看的代码位于 app/controllers/application_controller.rb
中,用户模型可以在 user/models/user.rb
.
更新:我在调用 setter 时遇到问题,而 yield 没有定义它。抱歉造成混淆。
如果您将方法从 def set_phone
更改为 def phone=
那么将更难调用,但仍有可能:
user.send :phone=, phone do
# ...
end