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

时间:2016-05-31 06:09:58

标签: ruby-on-rails rails-migrations

我正在开发一个“费用管理器”应用,它可以帮助用户管理费用并使用图表生成报告,还可以按日期或按时间段排序。

用户可以登录添加费用,并从下拉列表中为每个费用选择一个类别。

到目前为止一切进展顺利,但是当用户注册时,如果有可能在类别表中添加一些默认类别,我会感到疑惑。我还要求用户删除这些不应影响其他用户类别的默认类别。

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

迁移以创建类别

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

因此,在创建用户时,也会创建默认类别!