Ruby on rails 当关系深入到2-3层时,与人的斗争有很多,并且属于交往

Ruby on rails 当关系深入到2-3层时,与人的斗争有很多,并且属于交往,ruby-on-rails,ruby,activerecord,associations,Ruby On Rails,Ruby,Activerecord,Associations,我对Rails和建立关联非常陌生,所以我怀疑我遗漏了一些非常明显的东西。我正在尝试建立一个应用程序,其中一个模型有两个模型,它有很多。第二种模式属于第一种模式,并且有许多第三种模式。第三个可以属于第一个模型,也可以属于第二个模型 具体来说,我有一个墙模型,可以容纳图片和拼贴。墙上可以挂图片或拼贴,也可以不挂。拼贴可以容纳图片 class Wall < ActiveRecord::Base belongs_to :user has_many :collages has_many :pictu

我对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
class-Wall
我得到的错误告诉我:

#Wall的未定义方法“picture”


我正在创建的关联是否有什么问题?

在任何模型上都有许多关联
给出了该方法的复数形式

因此,Wall类的方法
#pictures
可通过此行获得:

如果您希望
#picture
方法可用,您应该使用关联,因为
属于

如果您告诉我们这个错误是在哪里发生的,以及您要实现的功能,我们可以对这个问题进行更多的调试


图片类的名称也应该大写p

@cvibha
的答案应该可以帮助您进行关联

但是,还有一个问题你可能需要考虑。您正在调用此方法:

undefined method `picture?' for #Wall
Rails关联基本上根据您定义关联的方式创建记录(
有许多:图片
创建
@wall.pictures
)。但是,您正在调用
picture?

--

如果您有一个名为
picture?
的自定义方法,那么它应该可以工作(尽管关联不起作用-如另一个答案中所述)。你的问题是我认为你没有定义
picture?

我会这样做:

#app/models/wall.rb
Class Wall < ActiveRecord::Base
    ...
    def picture?
        #your code
    end
end

应该是
Class Picture
和大
P
感谢您的更正-这是一个打字错误,而不是问题的根源。
@wall.pictures.any?
@wall.pictures.first.present?