相关疑难解决方法(0)

Rails 3迁移:添加引用列?

如果我创建一个新的rails 3迁移(例如)

rails g migration tester title:tester user:references
Run Code Online (Sandbox Code Playgroud)

,一切正常......但是,如果我添加一个包含以下内容的列:

rails g migration add_user_to_tester user:references
Run Code Online (Sandbox Code Playgroud)

参考字段无法识别.简而言之,问题是:如何从命令行向rails迁移添加引用列?

migration activerecord ruby-on-rails

162
推荐指数
8
解决办法
11万
查看次数

在Rails 5中添加引用列迁移

用户有很多上传.我想在上传表中添加一个引用该用户的列.迁移应该是什么样的?

Rails 3的相关问题:Rails 3迁移:添加参考列?

Rails 4的相关问题:在Rails 4中添加引用列迁移

rails-migrations rails-activerecord ruby-on-rails-5

29
推荐指数
1
解决办法
2万
查看次数

index:true vs foreign_key:true(Rails)

按照指南,我运行以下命令:

rails g migration CreateSnippetsUsers snippet:belongs_to user:belongs_to
Run Code Online (Sandbox Code Playgroud)

这创建了以下迁移:

class CreateSnippetsUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :snippets_users do |t|
      t.belongs_to :snippet, foreign_key: true
      t.belongs_to :user, foreign_key: true
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

在过去,我见过同样的事情,而index: true不是foreign_key: true.这两者有什么区别?

ruby-on-rails rails-migrations rails-activerecord ruby-on-rails-5

13
推荐指数
2
解决办法
9280
查看次数

Rails 5 - 对象关系Impedence以及如何构造多个继承的类/表

编辑 我已经从原版编辑了这个,以便更容易理解.


我理解对象关系阻抗问题.我理解Rails STI和多态(Rails方式,它不是真正的OO多态).我已经阅读了一大堆关于此的博客和问题,但仍无法找到这个问题的答案.

class Person < ApplicationRecord (ie what was ActiveRecord::Base)
end

class Employee < Person
end

class Customer < Person
end
Run Code Online (Sandbox Code Playgroud)

......多种其他类型的人

现在让我们说'客户'要求扩展系统,并创建一些新东西.我们称之为项目,我们可以为其分配员工:

好的,让我们使用第三范式创建多对多:

class Project < ApplicationRecord
  has_many :assignments
  has_many :employees, through: :assignments  
end

class Employee < Person
  has_many :assignments
  has_many :projects, through: :assignments
end

class Assignment < ApplicationRecord
  belongs_to :employee
  belongs_to :project
end
Run Code Online (Sandbox Code Playgroud)

这不行.迁移将失败,因为没有名为Employee的表来创建外键约束.STI意味着'基类'是People表.

两个问题:

1你怎么解决这个问题?(为此你可能还想在这里筹码)

2如何为项目(应包括员工,但不包括人员或人员的其他子类型)正确创建序列化数据?

ProjectSerializer < ActiveModelSerializers

  has_many :employees
  has_many :employees, through: :assignments

end
Run Code Online (Sandbox Code Playgroud)

不会工作,所以你必须序列化人.


UPDATE


在迁移中,我创建了Project和Assignment表(Person已经存在).

所以现在数据库有这些表:

Project
Person
Assignment …
Run Code Online (Sandbox Code Playgroud)

many-to-many ruby-on-rails sti active-model-serializers

6
推荐指数
1
解决办法
418
查看次数

ActiveRecord :: StatementInvalid PG :: UndefinedColumn:ERROR

我正在使用rails_admin进行管理面板.只需更改图像模型中的关联

由此

class Image < ApplicationRecord
   belongs_to :user 
   belongs_to :product 
end
Run Code Online (Sandbox Code Playgroud)

对此

class Image < ApplicationRecord
   has_one :user 
   has_one :product 
end
Run Code Online (Sandbox Code Playgroud)

和用户模型是

class User < ApplicationRecord
   has_many :images,dependent: :destroy
end
Run Code Online (Sandbox Code Playgroud)

当我尝试从管理面板编辑用户时出现此错误.从另一方面它工作正常.

ActiveRecord::StatementInvalid at /user/72/edit

PG::UndefinedColumn: ERROR:  column users.image_id does not exist
LINE 1: SELECT  "users".* FROM "users" WHERE "users"."image_id" = $1...
                                         ^
: SELECT  "users".* FROM "users" WHERE "users"."image_id" = $1 LIMIT $2
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-admin rails-activerecord ruby-on-rails-5

6
推荐指数
1
解决办法
1725
查看次数

使用add_foreign_key进行Rails迁移:外键约束中引用的"column"user_id"不存在"

(Rails是5.0.0版,Ruby 2.3.0p0)

我想在Users表和Cards表之间创建一个关联.我已添加belongs_to :user到Cards模型和has_many :cardsUsers模型,并创建了一个迁移:

class AddUserIdToCard < ActiveRecord::Migration[5.0]
  def change
    add_foreign_key :cards, :users, column: :user_id
  end
end
Run Code Online (Sandbox Code Playgroud)

当我跑rake db:migrate,我收到错误:

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column "user_id" referenced in foreign key constraint does not exist
: ALTER TABLE "cards" ADD CONSTRAINT "fk_rails_8ef7749967"
FOREIGN KEY ("user_id")
  REFERENCES "users" ("id")
Run Code Online (Sandbox Code Playgroud)

现在我最初只是通过添加add_column :cards, :user_id, :integer到迁移来解决这个问题,但这看起来并不是很整洁,我担心以后会出现问题.有没有更好的方法来实现这一目标?

ruby ruby-on-rails ruby-on-rails-5

5
推荐指数
1
解决办法
3408
查看次数

如何将 ActiveRecord_AssociationRelation 转换为 ActiveRecord 中的数组?

如何将 aActiveRecord_AssociationRelation转换为 Rails 模型实例数组?

我有这样一个after_save钩子的代码:

class Like < ApplicationRecord
  belongs_to :likee, class_name: 'User', foreign_key: 'likee_id'
  belongs_to :liker, class_name: 'User', foreign_key: 'liker_id'

  after_save :mutual_like?

  private

  def mutual_like?
    if liker.likes.where(likee: liker) // returns collection proxy but I want to return an array of model instances so that I can create another model

    end
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有办法返回实例数组?

表供参考:

  create_table "likes", force: :cascade do |t|
    t.integer  "liker_id",      null: false
    t.integer  "likee_id",      null: false
    ...
  end
Run Code Online (Sandbox Code Playgroud)

我认为问题在于 Rails 没有根据 likee_id / …

ruby-on-rails

4
推荐指数
1
解决办法
7363
查看次数