Rails NoMethodError:未定义的方法“紧凑”错误

Posted

技术标签:

【中文标题】Rails NoMethodError:未定义的方法“紧凑”错误【英文标题】:Rails NoMethodError: undefined method `compact' error 【发布时间】:2015-01-06 03:05:47 【问题描述】:

我是 Rails 新手,无法弄清楚以下关系有什么问题。 我有一些型号如下 课堂问题 包括 Mongoid::Document has_one :dep_q, class_name: 'DepQ' 属于_to:rep,class_name:“Rep” 结束

class DepQ
  include Mongoid::Document
  has_one :data_holder, class_name: 'DataHolder'
  belongs_to :question, class_name: 'Question'
end

class DataHolder
  include Mongoid::Document
  has_one :rep, class_name:"Rep"
  belongs_to :dep_q, class_name:"DepQ"
end

class Rep
  include Mongoid::Document
  has_many :question, class_name: 'Question'
  belongs_to :data_holder, class_name: 'DataHolder'
end

我不知道我在这里做错了什么。我不知道为什么我会收到这个错误。我可以做到以下几点

a = Question.new
a.dep_q = DepQ.new
a.dep_q.data_holder = DataHolder.new
a.dep_q.data_holder.rep = Rep.new

但是,一旦我在 Rep 下创建一个新问题,我就会收到以下错误

NoMethodError: undefined method `compact' for #<Question:0x00000005168cf8>

为什么我会看到此错误,如何解决?

【问题讨论】:

我已经使用了一个类名,这会有问题吗?我尝试将其更改为问题,但错误是相同的 【参考方案1】:

因为Rep has_many questionsRep.questions 是一个数组。

您应该执行以下操作:

r = Rep.new
q = Question.new
r.questions << q

【讨论】:

以上是关于Rails NoMethodError:未定义的方法“紧凑”错误的主要内容,如果未能解决你的问题,请参考以下文章

Rails NoMethodError:未定义的方法“紧凑”错误

Ruby on Rails - 未定义的方法`split'代表nil:StocksController中的NilClass / NoMethodError #search

部署到Heroku:NoMethodError:nil:NilClass的未定义方法'+'

Rspec 测试:NoMethodError - nil.Nilclass 的未定义方法“id”

NoMethodError:未定义的方法“has_attached_file”

ActiveRecord NoMethodError:nil的未定义方法`association':NilClass