Я думаю, что ошибка, которую вы получаете, заключается в том, что в вашем методе построения вы устанавливаете @result
на @order.media_order_requests
, что является <ActiveRecord::Associations::CollectionProxy []>
@request = @order.media_order_requests
Это то, что @result
будет удерживать вваш взгляд.Поэтому, когда вы вызываете @request.media_type_id.empty?
по вашему мнению, вы вызываете media_type_id
для <ActiveRecord::Associations::CollectionProxy []>
объекта, у которого нет такого метода, и который является точным сообщением об ошибке, которое вы получаете.
В вашем методе построения у вас естьследующее утверждение после присваивания @request
@request.each.map{|request| media_types = MediaType.where.not(id: request.media_type_id)}
Похоже, вы думаете, что это утверждение изменит @request
, но это не так, оно просто возвращает новый сопоставленный массивв соответствии с блоком вы даете это.Этот массив затем возвращается методом building
и, вероятно, никогда не используется.
Чтобы изменить @request
, вам нужно будет сделать что-то вроде @request = @request.map ...
, но вам, вероятно, будет лучше установить несколько новыхпеременная, в которой, я думаю, вы пытались использовать оператор media_types = MediaType.where.not(id: request.media_type_id)
в функции карты.
Есть более эффективные способы сделать это, но, поскольку мы не видим деталей наших моделей, вы можете попробовать что-то вроде этого
request_media_types = @order.media_order_requests.map { |r| r.media_type_id } #hopefully this is a list of media_type_id's
@media_types = MediaType.select { |mt| !request_media_types.include? mt.id } #select thos MediaType object whose id is not in the request_media_types list
Я, очевидно, не могу проверить это, но, надеюсь, это заставит вас двигаться в правильном направлении.
, а затем использовать @media_types.empty?
по вашему мнению
Как примечание, похоже, что вы выполняете много логики в своих представлениях, логика принадлежит моделям и контроллерам.