Мне было интересно, существует ли общий способ объединения данных или выполнения вычислений на них (например, захват десяти случайных строк сценария фильма или умножение десяти цен на продукты друг на друга) в Rails или в MVC в целом,В частности, я пытаюсь сделать первый пример (10 строк сценария фильма) в моем приложении.
Я использую Rails 5.2+.То, что я до сих пор пробовал, это создание метода экземпляра getRandomLines
в моем ScriptLinesController
.Но я не уверен, должен ли я вместо этого использовать метод show и агрегировать данные на стороне клиента, или мне следует поместить метод в модель ScriptLine
Я протестировал следующееМаршрут с использованием Почтальона, и он работает, но кажется, что это неправильный путь:
#My routes.rb:
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
get 'script_lines/test', to: 'script_lines#getRandomLines'
end
Мой контроллер выглядит так:
class ScriptLinesController < ApplicationController
def index
render json: ScriptLine.all
end
def show
scriptLine = ScriptLine.find_by(id: params[:id])
render json: scriptLine
end
def getRandomLines
numLines=rand(0..9)
nineLines = []
numLines.times do
id_num = rand(1..ScriptLine.last.id)
nineLines << ScriptLine.find_by(id: id_num)
end
render json: nineLines[0]
end
end
Моя модель выглядит так:
class ScriptLine < ApplicationRecord
validates :line_number, presence:true
belongs_to :script
end
Наконец, моя схема выглядит следующим образом:
create_table "script_lines", force: :cascade do |t|
t.string "line_number"
t.string "line"
t.bigint "script_id"
t.index ["script_id"], name: "index_script_lines_on_script_id"
end
Итак, в общем, создание методов в контроллере и указание маршрутов к этим методам - правильный способ агрегировать / выполнять вычисления на данных.в остальном?В частности, мне интересно, являются ли разрешенными только 7 стандартных маршрутов RESTful, или если у вас могут быть специальные маршруты для манипулирования данными, которые соответствуют принципам REST.
Это мой первый вопрос, поэтому заранее извиняюсь, если он задает слишком много или слишком расплывчато, изменится соответственно.