我对Rails和设置关联非常陌生,所以我怀疑我错过了一些非常明显的东西。我试图建立一个应用程序,其中一个模型有两个模型,它有许多。第二个模型属于第一个模型,而第三个模型有许多。第三个可以属于第一个或第二个模型。
具体来说,我有一个墙上的模型,里面有图片和拼贴画。这面墙既可以挂图画,也可以挂拼贴画,或者两者都不能挂。拼贴画可以装图片。
class Wall < ActiveRecord::Base
belongs_to :user
has_many :collages
has_many :pictures
end
class Collage < ActiveRecord::Base
belongs_to :user
belongs_to :wall
has_many :pictures
end
class Picture < ActiveRecord::Base
belongs_to :user
belongs_to :wall
belongs_to :collage
end
我得到的错误是告诉我:
未定义方法' picture?' for #Wall
我正在创建的关联是否有问题?
has_many association
在任何模型上给出该方法的复数形式
因此,Wall类有#pictures
方法可用:
如果你想要#picture
方法可用,你应该使用关联作为belongs_to
如果你告诉我们你到底在哪里得到这个错误,我们可以调试更多的问题,如果你告诉我们你得到这个错误,你的功能是什么。
图片类的另一个名称应该是大写p
@cvibha
的答案应该可以帮助您进行关联
然而,你可能需要考虑另一个问题。你正在调用这个方法:
undefined method `picture?' for #Wall
Rails关联基本上是根据你如何定义关联来创建一个记录(has_many :pictures
创建@wall.pictures
)。但是,您调用的是picture?
,
如果您有一个名为picture?
的自定义方法,这应该可以工作(尽管没有关联工作-如另一个答案所述)。你的问题是我认为你没有定义picture?
我会这样做:
#app/models/wall.rb
Class Wall < ActiveRecord::Base
...
def picture?
#your code
end
end
或者,如果您希望验证图片的存在,您可能希望在视图中使用:
@wall.pictures.any?
@wall.pictures.first.present?