【问题标题】:What's a reliable why to create a custom id for an associated item in rails什么是可靠的为什么要为 rails 中的关联项目创建自定义 id
【发布时间】:2012-08-15 16:18:25
【问题描述】:

我有一个这样的嵌套资源

resources :projects do resources :tasks end

任务有一个名为 number 的字段。每当我创建一个任务时,我都想在父项目中给它一个连续的编号。

这是我的模型类

   class Task < ActiveRecord :: Base
 belongs_to :project

    validate_presence_of :title
    before_create :generate_number

    private
    def generate_number
        if project.tasks.nil? || project.tasks.count < 1
            self.number = 1
        else
            self.number = list.topics.count+1
        end
    end
end

我不确定某些事情: 此逻辑是否属于我的任务模型或项目模型或单独的类/模块? 什么是最好的过滤前。 (before_create、before_validation、验证)? 因为有很多方法可以创建任务。用一个列表,在一个列表中,单独然后将它附加到一个列表中...... 哪个过滤器可以在我的测试中工作,这样我就可以设置一些假货,例如工厂女孩......因为现在 FactoryGirl 并不总是执行生成号码......

这是我的工厂

FactoryGirl.define do 
factory :project do
    name "Hello world"
end
trait :with_tasks do
    ignore do
        number_of_tasks 3
    end
    after :create do |project,evaluator|
        @project.Factory.create_list :taks, evaluator.number_of_tasks, :project => project
    end
end

结束

什么是最好的。根据在我的规范和生产中工作的项目生成顺序自定义任务编号的可靠方法? 任何最佳实践提示将不胜感激。

【问题讨论】:

    标签: ruby-on-rails-3 activerecord business-logic


    【解决方案1】:

    我会将 before_create 回调保留在 Task 模型中,它会调用 generate_number 函数。这应该适用于 Factory girl,如果您使用 Factory.create,它会添加数字,但在您使用 Factory.build 时不会。

    【讨论】:

    • before_save 会在每次保存时执行,对吗?这将覆盖每次保存时的 id
    猜你喜欢
    • 2010-09-29
    • 2021-08-20
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多