Я пытаюсь найти элегантный (стандартный) способ передать родительский элемент полиморфной модели на представление. Например:
class Picture < ActiveRecord::Base
belongs_to :imageable, :polymorphic => true
end
class Employee < ActiveRecord::Base
has_many :pictures, :as => :imageable
end
class Product < ActiveRecord::Base
has_many :pictures, :as => :imageable
end
Следующий способ (find_imageable
) работает, но он кажется "хакерским".
#PictureController (обновлено, чтобы включить полный список)
class PictureController < ApplicationController
#/employees/:id/picture/new
#/products/:id/picture/new
def new
@picture = imageable.pictures.new
respond_with [imageable, @picture]
end
private
def imageable
@imageable ||= find_imageable
end
def find_imageable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
end
Есть ли лучший способ?
ИЗМЕНИТЬ
Я выполняю действие new
. Путь принимает форму parent_model/:id/picture/new
, а params включают родительский идентификатор (employee_id
или product_id
).