我试图在我的模型中进行一个非常简单的连接,以列出所有地点'在' Post'有一定的身份证。
目前,每个帖子has_many :locations, :through => :location_post
。我正在使用' blogit' gem,将帖子放在名为' Blogit :: Posts'。
当我尝试在Post.rb模型中运行以下内容时出现wrong argument type Class (expected Module)
错误:
module Blogit
class Post < ActiveRecord::Base
before_save :reuse_existing_locations
def reuse_existing_locations
existing_locations = Location.include(Blogit::Post).first
end
如何通过模块进行加入?
提前致谢!
答案 0 :(得分:1)
我不确定我是否理解你想要完成的事情,所以只需要一些注释和观察:
Blogit::Post
是一个类,而不是一个模块。include
方法需要模块(不是类),这就是你看到的错误。include
模型上的Location
方法,这看起来很亲切
对我来说很奇怪你的意思是打电话给includes
吗?但话说回来
没有多大意义,因为看起来你有一个many to many
Location
和Blogit::Post
之间的关系。在Location
模型中(不需要位于Blogit
命名空间中),您只需将Blogit::Post
模型引用为
如下:
has_many :posts, class_name: "Blogit::Post", ...
如果existing_locations
实际上是模型上的属性,并且您想要为其分配,则需要将self
放在其前面(如self.existing_locations
中所示) 。否则你只是创建一个局部变量。
答案 1 :(得分:0)
您可能希望使用活动模型includes
而不是Ruby的include
,其中包含来自其他模块的方法。