Ruby on rails Rails验证don';我不想更新
我的验证器有问题。我有一个“联系人”模型,它包含两个字段firstname和lastname,我希望CREATE和UPDATE方法都需要这两个字段。当我创建一个没有数据的记录时,服务器返回422并执行回滚。这没关系。但是,当我更新记录时,服务器不会返回错误422,尽管服务器执行回滚。我需要返回错误以在客户端管理它 因此,我使用如下验证程序:Ruby on rails Rails验证don';我不想更新,ruby-on-rails,ruby,validation,Ruby On Rails,Ruby,Validation,我的验证器有问题。我有一个“联系人”模型,它包含两个字段firstname和lastname,我希望CREATE和UPDATE方法都需要这两个字段。当我创建一个没有数据的记录时,服务器返回422并执行回滚。这没关系。但是,当我更新记录时,服务器不会返回错误422,尽管服务器执行回滚。我需要返回错误以在客户端管理它 因此,我使用如下验证程序: class Contact < ActiveRecord::Base validates :lastname, presence: tr
class Contact < ActiveRecord::Base
validates :lastname, presence: true
validates :firstname, presence: true
end
class联系人
我的控制器是:
class ContactsController < ApplicationController
respond_to :json
def index
respond_with Contact.all
end
def create
respond_with Contact.create(contact_params)
end
def show
respond_with Contact.find(params[:id])
end
def edit
respond_with Contact.find(params[:id])
end
def update
respond_with Contact.find(params[:id]).update(contact_params)
end
def destroy
respond_with Contact.find(params[:id]).destroy
end
private
def contact_params
params.require(:contact).permit(:lastname, :firstname, :position)
end
end
class contacts控制器
我有一个序列化程序:
class ContactSerializer < ActiveModel::Serializer
attributes :id, :lastname, :firstname, :created_at, :updated_at
end
class ContactSerializer
有人能帮我吗
提前感谢。您可以尝试以下代码,它可能是tempo fix
def update
@contact = Contact.find params[:id]
@contact.update contact_params
if @contact.errors.count > 0
# do you like
else
respond_with @contact
end
end
返回一个布尔值,所以您告诉Rails呈现一个布尔值(这将呈现一个200,布尔值序列化为JSON)
销毁也一样。您需要传递实例
def update
contact = Contact.find(params[:id])
contact.update(contact_params)
respond_with contact
end
def destroy
contact = Contact.find(params[:id])
contact.destroy
respond_with contact
end
在执行操作之前,在中提取查找程序也是一个好习惯
before_action :find_contact
def update
@contact.update(contact_params)
respond_with @contact
end
def destroy
@contact.destroy
respond_with @contact
end
protected
def find_contact
@contact = Contact.find(params[:id])
end
您可以重构其他操作以删除重复查找器。此操作的可能重复修复了我的问题。谢谢
before_action :find_contact
def update
@contact.update(contact_params)
respond_with @contact
end
def destroy
@contact.destroy
respond_with @contact
end
protected
def find_contact
@contact = Contact.find(params[:id])
end