Обновить все реквизиты модели - PullRequest
0 голосов
/ 29 октября 2019

Мое приложение имеет следующие модели

class Metric < ApplicationRecord
  belongs_to :post

  def analyse!
    client = ThirdPartyService.new
    res = client.get_metrics post.body
    # how to update itself here with the result of res?
  end
end
class Post < ApplicationRecord
  has_many :metrics

  after_save :start_analysis

  private

  def start_analysis
    metric = create_metric
    metric.analysis!
  end
end

В таблице метрик есть несколько метрик, например:

adverbs_percentage
sentiment

и возвращаемый результат вызова:

client = ThirdPartyService.new
res = client.get_metrics post.body

- это хеш, содержащий именно эти реквизиты:

{
  :adverbs_percentage => 10
  :sentiment => 'Positive'
}

Я хотел бы знать, как я могу обновить Метрику из метода analyse!, что-то вроде:

update_myself(res)

Спасибо.

Ответы [ 2 ]

2 голосов
/ 29 октября 2019

Я считаю, что вы можете сделать:

class Metric < ApplicationRecord
  belongs_to :post

  def analyse!
    client = ThirdPartyService.new
    res = client.get_metrics post.body
    update res
  end
end
0 голосов
/ 29 октября 2019

Согласно документации Rails , вы можете обновить свою модель следующим образом.

m = Metric.first
m.adverbs_percentage= 10
m.sentiment= 'Positive'
m.save

В приведенном выше примере adverbs_percentage=, sentiment=, saveявляются методом экземпляра класса Metric.
Вы определили эти методы экземпляра, унаследовав ApplicationRecord.

Поскольку они являются методом экземпляра, вы можете вызывать эти методы в своем методе экземпляра (analyse!).

class Metric < ApplicationRecord
  belongs_to :post

  def analyse!
    client = ThirdPartyService.new
    res = client.get_metrics post.body

    self.sentiment = res.sentiment
    self.adverbs_percentage = res.adverbs_percentage 
    save
  end
end

Обратите внимание, что adverbs_percentage= и sentiment= требуется self., потому что ruby ​​необходимо отличать их от присваивания локальной переменной.
См. здесь для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...