【问题标题】:Ruby on Rails - Problem ActiveRecord, Migrations and two columns to same tableRuby on Rails - 问题 ActiveRecord、迁移和两列到同一个表
【发布时间】:2011-03-04 21:05:53
【问题描述】:

好的,所以我拥有的是一个记录“人”历史记录的表,它记录了人(用户)、处理程序(用户)、之前的状态(JobApplicationStatus)、之后的状态(JobApplicationStatus)。

现在在我的脑海中,这转化为一张这样的表格:

**工作申请历史** 标识(整数) status_before_id (int) status_after_id (int) user_id (int) handler_id (int)

我尝试进行迁移,这有点奏效,但无法正常工作。

因为我想使用类似的东西:

用户 = User.find(1) 处理程序 = User.find(1) status_before = JobApplicationStatus.find(1) status_after = JobApplicationStatus.find(2) 历史 = JobApplicationHistory.new() 历史用户=用户 history.handler = 处理程序 history.status_before = status_before history.status_after = status_after 历史.保存

这是我的迁移

class CreateUserApplicationHistories < ActiveRecord::Migration
  def self.up
    create_table :user_application_histories do |t|
      t.integer :user_id # goes to User
      t.references :job # goes to Job
      t.integer :handler_id # goes to User
      t.integer :status_from_id # goes to JobApplicationStatus
      t.integer :status_to_id # goes to JobApplicationStatus
      t.timestamps
    end

add_index("user_application_histories", "job_id")
add_index("user_application_histories", "handler_id")
add_index("user_application_histories", "user_id")
add_index("user_application_histories", "status_from_id")
add_index("user_application_histories", "status_to_id")

结束

def self.down drop_table :user_application_histories 结尾 结尾

还有我的模型,我认为它会失败

class UserApplicationHistory < ActiveRecord::Base
  belongs_to :status_from_id, :class_name => "JobApplicationStatus"
    belongs_to :status_to_id, :class_name => "JobApplicationStatus"
  belongs_to :user_id, :class_name => "User"
  belongs_to :handler_id, :class_name => "User"
end

【问题讨论】:

  • 您看到的错误/故障是什么?
  • 它没有分配任何东西,status_before 和其他的保持为空

标签: ruby-on-rails activerecord migration rails-migrations


【解决方案1】:

没错,对于用户和处理程序,您的模型应该如下所示:

belongs_to :user
belongs_to :handler, :class_name => "User"

为了帮助您了解 JobApplicationStatus,我需要知道该表的外观

【讨论】:

  • foreign_key 是隐式的。如果不是[association_name]_id,则应仅使用该选项。
  • @Ryan,你的权利,我已经编辑了我的答案以使其更好;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 2014-09-08
相关资源
最近更新 更多