BSON 对象的未定义方法 - Ruby on Rails
undefined method for BSON Object - Ruby on Rails
我在使用 rails 和 mongoid 时遇到问题,我创建了一个在所有学校 class 上循环的 rake 任务,并找到 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)
我在使用 rails 和 mongoid 时遇到问题,我创建了一个在所有学校 class 上循环的 rake 任务,并找到 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)