当前位置:  开发笔记 > 后端 > 正文

add_column用于引用(Rails)

如何解决《add_column用于引用(Rails)》经验,为你挑选了4个好方法。

我有以下Rails迁移工作完美(删除不相关的部分):

create_table :comments do |t|
  t.text :body
  t.references :post
end

现在我想author在我的comments表中添加一个列(这是用户的用户ID),但我不知道该怎么做(我很想用a编写特定于MySql的语法execute).

我一直在看add_column 这里没有提到references.我实际上找到了TableDefinition#引用,但我不知道如何将它与add_column语句一起使用.

这可能吗?另外,对于MySql,"引用"功能是否真的没有在表之间建立关系?



1> Jaime Bellmy..:

虽然从这里得到任何积分已经太晚了,但我想我会为后人发布最好的方法:)

使用change_table而不是create_table将列添加到已存在的表中,具有所有TableDefinition优点:

self.up do
  change_table :comments do |t|
    t.references :author
  end
end

这可能看起来微不足道,但是像Devise这样的其他宝石会大量使用自己的自定义表定义,这样你仍然可以使用它们.


@Jackson Miller没有一个t.unreference来撤消你的引用添加,但是你可以在上面的例子中使用t.remove:author_id.如果您使用"t.references:author,:polymorphic => true",那么您还需要在向下迁移中使用"t.remove author_type".
不幸的是,这个答案是4-5岁.即使这可行,但这不再是Rails 4+的可接受方法.请参阅Rajeev Kannav Sharma和Josh Crozier的DRY,单线建议

2> Rajeev Kanna..:
add_reference :table_name, :reference, index: true


对于_Rails 4_来说,这是一个很好的答案.这里是[API参考](http://apidock.com/rails/v4.0.2/ActiveRecord/ConnectionAdapters/SchemaStatements/add_reference)
同意.这应该是Rails 4+的"新"正确答案.
您还可以传递`add_reference:table_name,:reference,polymorphic:true,index:true`

3> Swapnil Chin..:

终于明白了

add_column :locations, :state_id , :integer, :references => "states"



4> Milan Novota..:

首先,做:

script/generate migration AddAuthorIdToComments

打开生成的文件并添加以下行:

add_column :comments, :author_id, :integer

然后在您的模型文件中:

class User < ActiveRecord::Base
  has_many :comments, :foreign_key => "author_id"
end

class Comment
  belongs_to :author, :class_name => User
end

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有