Ruby如何用yield调用类setter

时间:2017-03-24 14:56:02

标签: ruby syntax sinatra

我能够让我的代码正常工作,但我不喜欢它在语法上的工作方式 - 不确定这是否是一个单词。

目前我的代码:

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

我希望它看起来如何工作:

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模型。我想这样做的原因是,只有在发送到phone的变量user.phone=user.phone的现有值不同时才会调用yield。

我认为这更像是一个语法问题,但仅限于here is repo用于上下文。您正在查看的代码位于app/controllers/application_controller.rb,用户模型可以在user/models/user.rb中找到。

更新:我无法在没有定义它的情况下调用setter。对不起,感到困惑。

1 个答案:

答案 0 :(得分:1)

如果您将方法从def set_phone更改为def phone=,那么调用将更加困难,但仍有可能:

user.send :phone=, phone do
  # ...
end