Я ищу лучшую практику для решения следующей ситуации:
У меня есть «Аддитивная» модель, которая должна быть связана со многими другими моделями.
Примеры:
# Meal-Model
has_and_belongs_to_many :additives
# Offer-Model
has_and_belongs_to_many :additives
# Additive-Model
has_and_belongs_to_many :meals
has_and_belongs_to_many :meals
Маршруты вложены следующим образом:
resources :offers do
resources :additives
end
resources :meals do
resources :additives
end
Итак, я получаю URL-адреса вроде этого:
/offers/123/additives
/meals/567/additives
Оба маршрута приводят к тому же действию контроллера, которое additives#index
. В AdditivesController я проверяю, доступны ли параметры, чтобы выбрать, какие данные нужно извлечь:
class AdditivesController < ApplicationController
before_filter :offermealswitch
# GET /restaurants/1/meals/123/additives
# GET /restaurants/1/offers/123/additives
def index
@additives = @additivemeal.additives
end
def offermealswitch
if params.has_key?(:meal_id)
@additivemeal = Meal.find(params[:meal_id])
@type = "Meal"
elsif params.has_key?(:offer_id)
@additivemeal = Offer.find(params[:offer_id])
@type = "Offer"
end
end
end
Это правильный способ решения этой проблемы? Это работает очень хорошо, но я не уверен, что это путь рельсов ...
Спасибо за ваши ответы!