BSON Object 的未定义方法 - Ruby on Rails



我在使用轨道和mongoid时遇到问题,我创建了一个在所有学校类上循环的耙子任务,并找到最近的3所高级学校,将它们插入数组字段中。所以,我希望能够在视图上显示它们,但我有以下错误消息:

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

这是塔克斯:

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 所优质学校吗?

谢谢!

在您的学校模型中,您有字段

field :school_premium_asides, type: Array

并且您在此处仅将高级学校ID存储到该数组中

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)

最新更新