Я определил свои модели следующим образом. Я пытаюсь сделать @user.orders
используя has_many
. Я определил метод: orders
, чтобы показать поведение, которое я хочу.Как установить «имеет много: через» полиморфную ассоциацию
class Location < ActiveRecord::Base
belongs_to :locationable, polymorphic: true
has_many :orders, ->(location) { where(location.locationable_type == 'User') }, class_name: 'Order', foreign_key: :drop_location_id
# but this does not check for type
# it produces the SQL: SELECT "orders".* FROM "orders" WHERE "orders"."drop_location_id" = $1
end
class Order < ActiveRecord::Base
# location is polymorphic, so type of location can be merchant/user
belongs_to :pickup_location, class_name: 'Location'
belongs_to :drop_location, class_name: 'Location'
end
class User < ActiveRecord::Base
has_many :locations, as: :locationable
# TODO: make it a has_many :orders instead
def orders
Order.where(drop_location: locations)
end
end
Используя метод не чувствует, как рельсы пути. Кроме того, я хочу, чтобы он хорошо работал с rails_admin
.
Я думаю, вы правы, что с помощью метода не существует пути Rails. Но также определение в has_many-заявлении - это то, чего я никогда не видел, и не пытался. Я рекомендую: http://guides.rubyonrails.org/association_basics.html для разработки лучшей практики для ассоциаций активных записей в Rails. – Elvn