麻烦从has_many和belongs_to改为has_many

时间:2014-12-17 06:01:22

标签: ruby-on-rails ruby-on-rails-4 associations has-many-through

我已经完成了大约十亿次搜索,并尝试了很多东西,但我仍然遇到错误。我最近改为通过一个名为joinable的模型(也许这就是问题),并且我似乎无法让事情顺利进行。我的一部分认为它有点小,因为我对它有所了解,但我不确定我是否正确地完成了它。我也在使用设计。

以下是我认为的所有相关部分

用户

class User < ActiveRecord::Base
  acts_as_voter
  has_many :joinables
  has_many :pits, through: :joinables
  has_many :comments
  enum role: [:user, :vip, :admin]
  after_initialize :set_default_role, :if => :new_record?


class Pit < ActiveRecord::Base
  validates :topic, :author, :summary, presence: true
  acts_as_taggable
  acts_as_votable
  has_many :comments
  has_many :joinables
  has_many :users, through: :joinables
  mount_uploader :image, ImageUploader

我创建了一个名为“joinable”的独立表,现在我不知道如何填充它。我可以创建一个用户,但不能创建一个坑。我是否需要改造我的控制器,或者他的东西很小我可能会丢失?我得到了这个想法,但是基于我到目前为止所读到的所有内容,一些小细节都是模糊的。我甚至尝试了一个名为Pit_Users的连接表的HABTM。

我目前正在“无法找到表格'加入”

来自我的控制器

def create
@pit = current_user.pits.create(pit_params) 

最近的迁移

class Joinable < ActiveRecord::Migration
  create_table :joinable do |t|
      t.integer :pit_id, :user_id
      t.timestamps
    end
end

我尝试了许多具有类似错误的组合。许多教程/指南都有很好的基础知识,但似乎遗漏了一些细节。那或我只是想念他们。无论如何。如果有更多知识渊博的人可以指出可能是明显的错误,那就会喜欢它。谢谢。

2 个答案:

答案 0 :(得分:1)

解决方案是运行rails generator for model

从控制台运行

rails generate model Joinable pit:references user:references

删除

的迁移文件
class Joinable < ActiveRecord::Migration
  create_table :joinable do |t|
      t.integer :pit_id, :user_id
      t.timestamps
    end
end

运行rails generator后,使用model时,您将获得Joinable关系所需的through,并为您创建适当的迁移。

答案 1 :(得分:1)

在迁移文件中,它应该是:

class Joinables < ActiveRecord::Migration
  create_table :joinables do |t|
    t.integer :pit_id  
    t.integer :user_id
  end
end    

在app / models / joinable.rb中,应该有:

class Joinable < ActiveRecord::Base
  belongs_to :user
  belongs_to :pit
end

您可以验证它是否在Rails控制台上运行。试试这个以获得关联的Pit记录:

user_1 = User.create( ... )
pit_1  = user_1.pits.create!( ... )
pit_1.users.first  # should give you user as user_1