Rails通过一个模块加入

时间:2014-07-27 14:25:19

标签: ruby-on-rails ruby join

我试图在我的模型中进行一个非常简单的连接,以列出所有地点'在' 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

如何通过模块进行加入?

提前致谢!

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解你想要完成的事情,所以只需要一些注释和观察:

  • 通过查看code,很明显Blogit::Post是一个类,而不是一个模块。
  • include方法需要模块(不是类),这就是你看到的错误。
  • 您正在调用include模型上的Location方法,这看起来很亲切 对我来说很奇怪你的意思是打电话给includes吗?但话说回来 没有多大意义,因为看起来你有一个many to many LocationBlogit::Post之间的关系。
  • Location模型中(不需要位于Blogit命名空间中),您只需将Blogit::Post模型引用为 如下:

    has_many :posts, class_name: "Blogit::Post", ...
    
  • 如果existing_locations实际上是模型上的属性,并且您想要为其分配,则需要将self放在其前面(如self.existing_locations中所示) 。否则你只是创建一个局部变量。

答案 1 :(得分:0)

您可能希望使用活动模型includes而不是Ruby的include,其中包含来自其他模块的方法。