如何在 rails 中的列中设置一些默认值

How to set some default values in a column in rails

我正在开发一个 'expense manager' 应用程序,它可以帮助用户管理他们的费用并使用图表生成报告,他们还可以按日期或时间段对费用进行排序。

用户可以登录添加费用并select从下拉列表中为每项费用分类。

到目前为止一切顺利,但我一直怀疑是否有可能在用户注册时在类别 table 中添加一些默认类别。我还要求用户删除这些不应影响其他用户类别的默认类别。

请建议我如何处理此要求而不是使用种子数据。

创建类别迁移

class CreateCategories < ActiveRecord::Migration
  def change
    create_table :categories do |t|
      t.string :name

      t.timestamps null: false
    end
  end
end

费用新表格中的类别下拉

    <div class="form-group">
      <%= f.label :category, "Category:" %><br>
    <div class="col-md-2">    
       <%= f.collection_select(:category_id, current_user.categories, :id, :name, {}, { :class => "select_box selectpicker picker"}) %>
    </div>
  </div>

Git 此应用程序的存储库:https://github.com/atchyut-re/expense_manager

希望我清楚如果我需要提供任何进一步的细节请在评论中提及。

您可以简单地使用 rails 回调为每个用户创建默认类别,代码如下:

class User < ActiveRecord::Base
  before_create :create_default_categories

  DEFAULT_CATEGORIES = [
     {name: 'default name 1', other_attribute: 'default other attribute 1'},
     {name: 'default name 2', other_attribute: 'default other attribute 2'}
  ]

  def create_default_categories
    DEFAULT_CATEGORIES.each do |default_attrs|
      self.categories.build(default_attrs)
    end
  end
end

所以当用户被创建时,默认类别也会被创建!

在您的 user 模型中创建一个 after_create 回调以创建一些 类别。由于 类别 取决于用户,因此 usercategories 之间应该存在关联。