当关系有2-3个深度时,与has_many和belongs_to联想作斗争



我对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?

最新更新