【问题标题】:How can I add new attributes to my rails models?如何向我的 Rails 模型添加新属性?
【发布时间】:2018-10-04 10:38:15
【问题描述】:

我创建了一个模型使用: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控制台并尝试添加一个类别:

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

【问题讨论】:

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


    【解决方案1】:

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

    您必须定义迁移以将列/属性添加到数据库。

    步骤: 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. 现在检查

    【讨论】:

    • 很高兴 :)
    【解决方案2】:

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

    rails g migration AddNameToCategory name:string
    rails db:migrate
    

    【讨论】:

    • 是的,我已经找到了这个,但每次执行此操作时都会添加一个新的迁移文件。为什么不能只编辑 3957934_create_category.rb ?然后我只需要打开一个文件就可以看到所有的表格
    • 不,因为这就是迁移的目的,您可以在一段时间内返回到某些特定的数据库设置。因此,每次您需要更改 db 添加新表时,新列都需要是单个文件,以便将来跟踪。因此,您可以删除该迁移文件并通过使用 rails g migration .... 生成新文件
    • 所以现在您可以删除 db/migration 中为将名称添加到类别而创建的所有迁移。然后用我上面写的这个命令创建一个新的。
    【解决方案3】:

    虽然 rails 生成器已经为您指定的属性创建了一个数据库迁移,但您需要创建一个新的迁移来添加新的属性/数据库列。查看迁移指南:

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

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

    rails g migration add_categories_name

    迁移方法里面:

    add_column :categories, :name, :string

    然后再次运行rake db:migrate

    同时从模型中移除对属性的调用。

    【讨论】:

      猜你喜欢
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      相关资源
      最近更新 更多