1

我有两个模型:

class LocationPreferences
  include Mongoid::Document

  has_and_belongs_to_many :neighborhoods,
                          class_name: "Neighborhood",
                          inverse_of: nil
end

class Neighborhood
  include Mongoid::Document

  field :name,         type: String, default: nil
end

我正在使用 Rails FormHelper构建一个表单,并希望为这组首选项可能包括的每个邻域创建一个复选框列表。所以,我的表单生成器看起来像:

= form_for preferences do |form|
  = form.collection_check_boxes :neighborhoods, Neighborhood.all, :name, :name

但是,这会引发错误:

undefined method `id' for "Downtown":String

它似乎调用了name第一个 Neighborhood 的方法来获取它的值,它应该这样做,但是由于某种奇怪的原因,它试图id在它从调用中返回的 String 上调用name......坦率地说,这没有任何意义。这里发生了什么?我该如何解决?

  • 大卫

更新

得到这个......我尝试使用另一个 FormHelper,而不是与 Rails 捆绑在一起的东西,在本例中是 simple_form。使用相同collection_check_boxes会产生相同的错误。但是,使用以下似乎工作得很好。

= form.association :neighborhoods, collection: Neighborhood.all, as: :check_boxes

这并不是真正的“修复”,所以我不会将其标记为解决方案。我很难相信 Railscollection_check_boxes在其最简单的示例中是开箱即用的,所以我猜这与 Mongoid 不能很好地使用这个 FormHelper 有关。我仍然想知道如何使原始功能正常工作。

4

0 回答 0