У меня есть следующие модели:
class Post < ApplicationRecord
belongs_to :site
has_one :metric, dependent: :destroy
end
class Metric < ApplicationRecord
belongs_to :post
end
И я хотел бы создать конечную точку, которая при вызове агрегирует отправленные данные, а не просто обновляет их. Итак, в моих маршрутах я изменил обычный put "metrics", to: "metrics#update
на patch "metrics", to: "metrics#update
, и мой контроллер выглядит следующим образом:
class MetricsController < ApplicationController
before_action :set_post, only: [:update]
def update
# TODO
end
private
def set_post
@post = Post.find_by(post_id: params[:post_id])
end
end
Первое, что следует отметить, это то, что вместо обычного METHOD /{id}
все маршрутыследует называть передачей post_id
. Хотя это может показаться странным, но в моем случае это имеет смысл - WordPress-блоги по всему миру (надеюсь, ха-ха) будут отправлять метрики в эту конечную точку, и единственное, что они знают, - это их уникальный идентификатор (site_id
) +идентификатор сообщения в блоге WordPress (тот, который хранится в базе данных WordPress - я называю его post_id
в моей базе данных).
Для примера скажем, что моя модель имеет только следующие столбцы:
sentiment
word_count
paragraph_length
Теперь, я хотел бы получить вашу помощь в следующем: как я могу проверить, если эти свойства присутствуют в теле запроса?
Спасибо