目前在seeds.rb我有这样的代码:
Mission.create({ name: "Web Platform", status_id: 3});
# Statuses
Status.create({ name: "active"})
Status.create({ name: "complete"})
Status.create({ name: "future"})
这似乎非常错误(因为从外面这个status_id看起来像一个没有意义的神奇数字,因为依赖于顺序(或手动设置id))但我找不到:怎么做更好?
答案 0 :(得分:1)
一个简单的解决方案是将您的状态分配给变量,然后使用它们。
# Statuses
active = Status.create({ name: "active"})
complete = Status.create({ name: "complete"})
future = Status.create({ name: "future"})
Mission.create({ name: "Web Platform", status_id: future.id});
答案 1 :(得分:1)
假设您的任务has_one :status
和状态belongs_to :mission
这样的事情:
Status.create(name: 'active')
# Same for complete and future
mission = Mission.build(name: 'Web Platform')
mission.status = Status.where(name: 'future').first
mission.save
甚至更好,改进您的模型状态类
class Status < ActiveRecord::Base
def self.status_active
where(name: 'active').first_or_create
end
def self.status_complete
where(name: 'complete').first_or_create
end
# Etc...
end
然后你可以做
mission = Mission.build(name: 'Web Platform')
mission.status = Status.status_future
mission.save!
无需手动创建状态(感谢 Mike Manfrin 建议)
答案 2 :(得分:0)
假设你的任务has_one:status
mission = Mission.create name: "Web Platform"
mission.status.create name: "active"
然后您可以通过输入以下内容来编辑状态:
mission.status.update_attributes name: "future"