Activerecord 如何在Rails中从另一个模型读取属性 我仍然认为自己是新手。我正在Rails应用程序中实现一个SMS功能,提醒客户即将进行的约会。我的问题是,我的约会模型中有SMS方法,但我的客户端模型是phone属性所在的位置。如何从约会模型调用我的电话属性

Activerecord 如何在Rails中从另一个模型读取属性 我仍然认为自己是新手。我正在Rails应用程序中实现一个SMS功能,提醒客户即将进行的约会。我的问题是,我的约会模型中有SMS方法,但我的客户端模型是phone属性所在的位置。如何从约会模型调用我的电话属性,activerecord,ruby-on-rails-5,Activerecord,Ruby On Rails 5,这是我的预约模式 class Appointment < ApplicationRecord enum status: { confirmed: 0, rescheduled: 1, cancelled: 2} belongs_to :user belongs_to :client validates :start_time, presence: true validates :end_time, presence: true after_create :remi

这是我的预约模式

class Appointment < ApplicationRecord
  enum status: { confirmed: 0, rescheduled: 1, cancelled: 2}
  belongs_to :user
  belongs_to :client
  validates :start_time, presence: true
  validates :end_time, presence: true

  after_create :reminder

  def reminder
    @twilio_number = ENV['TWILIO_NUMBER']
    account_sid = ENV['TWILIO_ACCOUNT_SID']
    @client = Twilio::REST:Client.new account_sid, ENV['TWILIO_AUTH_TOKEN']
    time_str = ((self.start_time).localtime).strftime("%I:%M%p on %b. %d, %Y")
    reminder = "Hi #{client.name}. Just a reminder that you have an appointment coming up at #{time_str}."
    message = @client.api.account(account_sid).messages.create(
      :from => @twilio_number,
      :to => client.phone_number,
      :body => reminder,
    )
  end
以及

:to => client.phone_number

要访问电话号码属性?

是的,您的假设是正确的,您只需拨打
客户端即可。。我引用了一个TL;博士摘录如下

我大致总结一下我使用这些方法的方法,如下所示: 如果我只是在筛选,请使用联接。 如果我要访问关系,请从包含开始。 如果使用两个单独的查询时include很慢,我将使用eager_load强制执行单个查询并比较性能

当通过ActiveRecord访问关系时,存在许多边缘情况。希望这足以防止在使用联接、包含、预加载和预加载时出现一些更基本的性能瓶颈

按照那篇文章的建议,我们将我的示例改写为

Appointment.all.includes(:client).each do {|a| a.reminder }

我刚看到这个。谢谢你的帮助,安德鲁!
:to => client.phone_number
Appointment.all.each do {|a| a.reminder }
Appointment.all.includes(:client).each do {|a| a.reminder }