Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用Ruby根据键中的选定值验证更新?_Ruby On Rails_Ruby_Validation_Params_Updating - Fatal编程技术网

Ruby on rails 如何使用Ruby根据键中的选定值验证更新?

Ruby on rails 如何使用Ruby根据键中的选定值验证更新?,ruby-on-rails,ruby,validation,params,updating,Ruby On Rails,Ruby,Validation,Params,Updating,我想对一个键的特定值集实现一个条件更新方法 仅当原始list.permissions值(在创建时设置)等于“public”、“viewable”或“editable”时,我才允许更新。如果记录的list.permissions值不等于这三个可接受值之一,则更新记录被拒绝(锁定) 我尝试在控制器文件的私有方法中修改强参数: def list_params_validated params.require(:list).permit(:title, permissions: ["publi

我想对一个键的特定值集实现一个条件更新方法

仅当原始list.permissions值(在创建时设置)等于“public”、“viewable”或“editable”时,我才允许更新。如果记录的list.permissions值不等于这三个可接受值之一,则更新记录被拒绝(锁定)

我尝试在控制器文件的私有方法中修改强参数:

def list_params_validated
     params.require(:list).permit(:title, permissions: ["public",  "viewable", "editable"])
end
然后在同一控制器中的my
update
方法中调用:

def update
  list = List.find(params[:id])
  if list.update(list_params_validated)

    render json: list

  else
    render json: { errors: list.errors.full_messages }, status: :unprocessable_entity
  end
end

如果这样做运气不好,任何帮助都将不胜感激!

您可以在
列表中添加自定义验证,如下所示,并在controller中调用simple
update

self.permissions
值应该是
string
“public”
“可视”
“可编辑”


您可以在
列表中添加自定义验证,如下所示,并在控制器中调用simple
update

self.permissions
值应该是
string
“public”
“可视”
“可编辑”


您只需在控制器上执行此操作

def list_params_validated
     params.require(:list).permit(:title, :permissions)
end
在您的模型中,只需添加以下内容

validates_inclusion_of :permissions, in: %w(public viewable editable), :on => :update, :message => "value %s is invalid!"
编辑1 为了防止更新记录,您应该在模型中添加before\u update callback作为

  before_update :locked?

def locked?
    return false if YourModel.find(id).persmissions == 'locked'
    true
end 

您只需在控制器上执行此操作

def list_params_validated
     params.require(:list).permit(:title, :permissions)
end
在您的模型中,只需添加以下内容

validates_inclusion_of :permissions, in: %w(public viewable editable), :on => :update, :message => "value %s is invalid!"
编辑1 为了防止更新记录,您应该在模型中添加before\u update callback作为

  before_update :locked?

def locked?
    return false if YourModel.find(id).persmissions == 'locked'
    true
end 


为什么要这样做?我们可以在那里简单地使用Hi的validate_inclusion_。我不确定这是否有帮助,因为创建该记录允许该权限键有许多不同的值。它只是更新我想要允许的先前存在的记录,仅取决于该权限中这三个值的存在ey.请更新您的问题。它不包括
锁定的
权限为什么要这样做?我们可以在那里简单地使用Hi的validate_inclusion_。我不确定这是否有帮助,因为创建记录允许该权限键有多个不同的值。这只是更新我想要允许的先前存在的记录,具体取决于请更新您的问题。它不包括
locked
permission谢谢!这非常接近。但是,作为测试,我查看了一个列表,其中一个值不是允许的三个值之一,然后对其中一个值进行了更新,结果是允许。如果只有这三个值中的一个要开始,我可以添加任何内容来锁定编辑吗?抱歉,我没有理解您的意思?如果您不介意,请详细说明!好的,假设我有一个权限值设置为“锁定”(非“公共”、“可查看”或“可编辑”)的记录。不应允许我编辑此记录中的任何内容,但即使使用您上面建议的验证,我也可以将权限值更改为“public”。我只能将其更改为“public”、“editable”或“viewable”“,但理想情况下,我不能将其更改为任何内容,因为这些不是创建时记录的设置权限值。ok@dpg5000看起来您的问题不足以让我们理解您的要求。请将您的问题更新为
locked
,谢谢!这非常接近。然而,作为测试,我去了一个列表,其中一个值不是允许的三个值中的一个,然后对三个值中的一个进行了更新,并被允许。如果只有这三个值中的一个要开始,我可以添加什么来锁定编辑吗?对不起,我没有理解你的意思?如果你不介意的话,可以请你详细说明一下吗!好的,假设我有一个权限值设置为“锁定”(不是“公共”、“可查看”或“可编辑”)的记录。不应允许我编辑此记录中的任何内容,但即使使用您在上面建议的验证,我也可以将权限值更改为“public”。我不能将其更改为“公共”、“可编辑”或“可查看”以外的任何内容,但理想情况下,我不能将其更改为任何内容,因为这些内容不是创建时记录的设置权限值。ok@dpg5000看起来您的问题不足以让我们理解您的要求。请使用术语
locked
更新您的问题。您好,这看起来很棒,但是我对列表值为“locked”(不是三个允许更新的值之一)的记录进行了测试。然后,我使用curl-in-terminal成功地将权限值更新为“public”(允许的权限值之一)。即使我们试图将其更改为一个允许值,我们是否可以做些什么来锁定它?答案已编辑为检查
是否锁定
,希望这将对您有所帮助。您好,谢谢,这看起来很棒,但是我对列表值为“锁定”的记录进行了测试(不是更新的三个允许值之一)。然后,我使用curl-in-terminal成功地将权限值更新为“public”(允许的权限值之一)。即使我们试图将其更改为允许值之一,我们是否可以采取任何措施将其锁定?答案已编辑为检查
是否锁定,希望这对您有所帮助。