2017-02-02 2 views
0

У меня проблема с использованием рельсов и mongoid, я создал задачу рейка, которая петляет по всем школьным классам, и найдите 3 ближайшую премиум-школу, вставьте их в поле Array. Итак, я хочу, чтобы иметь возможность отображать их на представлении, но у меня есть сообщение об ошибке:неопределенный метод для объекта BSON - Ruby on Rails

undefined method `title' for BSON::ObjectId('573f11e808207e00030000a1'):BSON::ObjectId 

Вот это TAKS:

namespace :geocodeschool do 

    desc "Show premium school near non-premium school and update them" 

    task :schgc => :environment do 

     @schools = School.all 

     def premium_school_aside(school) 
     radius = 50 
     @schools_a = School.near(school.coordinates.reverse, radius, units: :km) 
     @schools_premium = @schools_a.premium_school.limit(3) 
     end 

     @schools.each do |school| 
     premium_school_aside(school) 
     puts "// -------------- //" 
     puts "AUTO-ÉCOLE : #{school.title}" 
     puts "// -------------- //" 
     puts "les auto-écoles premiums près de #{school.title} : #{@schools_premium.count}" 
     puts "-------" 

     school.update(school_premium_asides: @schools_premium.map(&:id)) 

     puts "-------" 

    end 

    end 

end 

Здесь вы Вид:

<% unless @school.is_subscribed? %> 
    <% @schools_premium_aside.each do |spa| %> 
     <p> <%= spa.title %> </p> 
    <% end %> 
    <% end %> 

Здесь контроллер:

@schools_premium_aside = @school.school_premium_asides 

А вот модель:

# field for premium schools 
    field :school_premium_asides, type: Array 

ли кто-нибудь знает, как я могу получить доступ к данным для отображения 3 премиум-школа по мнению?

Спасибо!

ответ

0

В вашей модели школы, у вас есть поле

field :school_premium_asides, type: Array

и вы храните только премиум школы идентификаторов в массиве здесь

school.update(school_premium_asides: @schools_premium.map(&:id)) 

Но на странице просмотра вы пытаетесь Получить премиум школы заголовок из этого массива, который вы не сохранили.

<% unless @school.is_subscribed? %> 
    <% @schools_premium_aside.each do |spa| %> 
     <p> <%= spa.title %> </p> 
    <% end %> 
    <% end %> 

Возможное решение:

В запросе контроллера для этих школ, как этот

@schools_premium_aside = School.where(id: { '$in' => @school.school_premium_asides }).only(:id, :title) 
+0

Так что я не могу получить доступ к школе атрибутов только с идентификатором? как я мог сделать, чтобы сохранить классную школу в этом массиве, а не только идентификатор? –

+0

Вы все еще сталкиваетесь с какой-либо проблемой? @AntoninMrchd –

+0

с: '@schools_premium_aside = School.where (id: {'$ in' => @ school.school_premium_asides}). Only (: id,: title)' он работает! Большое спасибо ! –

Смежные вопросы