如何为Rails模型添加新属性?

时间:2018-10-04 10:38:15

标签: ruby-on-rails ruby-on-rails-4 rubygems ruby-on-rails-5

我使用以下方法创建了一个模型:rails g model category 现在,我想向该模型添加一些属性,例如名称

所以我去了模型并添加了行attribute :name

class Category < ApplicationRecord
  attribute :name
  #has_many :posts
end

这是我的控制器的外观:

class CategoriesController < ApplicationController

  #def permitted_params
   # params.require(:category).permit(:name)
  #end

  def index

  end

  def new
  end

  def create
    #category.create(permitted_params)
  end

  def edit
  end

  def update
  end

  def show
  end

  def destroy
  end
end

然后我运行命令:rails db:migrate,我想向数据库中添加一些内容以对其进行测试。

我使用了Rails控制台并尝试添加一个类别:

Console output

我需要怎么做才能将名称写入数据库?

3 个答案:

答案 0 :(得分:2)

您在模型中定义的属性是虚拟属性,不会向数据库写入任何内容。

您必须定义一个迁移,才能向数据库添加列/属性。

步骤: 1.从category.rb

中删除attribute :name
  1. 创建Rails迁移rails g migration add_fields_to_categories name:string attribute2:type attribute3:type

  2. 运行rails db:migrate

  3. 重新打开控制台并使用名称属性创建一个新类别。

  4. 现在检查

答案 1 :(得分:1)

要将属性添加到模型,您应该使用以下命令:

rails g migration AddNameToCategory name:string
rails db:migrate

答案 2 :(得分:1)

尽管rails生成器已经在为您指定的属性创建数据库迁移,但是您将需要创建新的迁移以添加新的属性/数据库列。查看迁移指南:

https://edgeguides.rubyonrails.org/active_record_migrations.html

要创建新迁移,您可以运行:

rails g migration add_categories_name

内部迁移更改方法:

add_column :categories, :name, :string

然后再次运行rake db:migrate

还从模型中删除对属性的调用。