我在寻找解决以下情况最好的做法不同的控制器行为:的Rails:根据路线
我有一种“添加剂”型号应与一些多到许多相关的其他型号。
例子:
# 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
所以我得到的网址是这样的:
/offers/123/additives
/meals/567/additives
两种途径都导致同一控制器行动,这是additives#index
。在添加剂控制器中,我检查是否有参数可供选择要提取哪些数据:
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
这是处理该问题的正确方法吗?它工作得很好,但我不舒服这是轨道的方式... 感谢您的答案!
我认为您的解决方案是相当不错,直到你的'offermealswitch'是不是太复杂。但是你也可以通过'type'与你的路线 – fl00r 2011-05-10 10:45:05
好的,我发现了一种方法来保存甚至'@type'实例变量:当我需要知道在我的控制器或视图中实际处理了哪种类型时,我检查'@meal .class == Meal'或'@meal.class == Offer'。只要它那么简单,对我来说这似乎是一个很好的解决方案。 – 2011-05-10 11:54:41