我正在使用Rails 4.2和Ruby 2.1.5。
这是我的API表:
create_table "apis", force: :cascade do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.string "status"
t.string "coname"
end
如何验证用户无法创建两次具有相同名称和相同状态的API?
例如,(姓名)" ABC" (状态)"好"已经存在,下次再也无法再创建它了。
答案 0 :(得分:3)
您需要将此验证放入Api模型:
validates :name, uniqueness: { scope: :status, message: 'your custom message' }
http://guides.rubyonrails.org/active_record_validations.html#uniqueness
答案 1 :(得分:3)
您可以在数据库中使用唯一索引和/或在rails模型类中使用唯一性验证。
唯一索引将在迁移中设置,如下所示:
class AddUniqueIndexToApis < ActiveRecord::Migration
add_index :apis, [:name, :status], unique: true
end
验证将是这样的:
class Api < ActiveRecord::Model
validates :name, uniqueness: { scope: :status }
end
答案 2 :(得分:0)
您可以在model
和migration
文件中确保这一点。我建议你在两个地方都这样做,但只有模型/迁移也可以。
请注意,在模型中应用限制将为您提供 对象上的错误。
在迁移文件中
def change
create_table "apis", force: :cascade do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.string "status"
t.string "coname"
end
add_index :name, :status, unique: true
end
以你的模特:
class ApiModel < ActiveRecord::Model
validates :name, uniqueness: { scope: :status }
end