我正在寻找一种方法来防止用户在没有更改任何值时单击我的Rails应用程序中的Update方法的更新。如果他们不更改任何值,我的UPDATE方法将在某些字段中写入空值,因此如果用户没有更改任何详细信息并且只是单击更新,我需要应用程序以防止更新记录。
def update
if @client.update(client_params)
redirect_to @client, notice: 'Client was successfully updated.'
else
render :edit
end
end
您可以结合使用attributes=和changed?方法来实现目标。
attributes=mass将哈希值分配给模型的实例。 changed?如果模型上的任何值更改了它的值,则返回true。
请看以下示例:
[1] pry(main)> u = User.all.sample # this returns a random user
=> #
[2] pry(main)> u.changed?
=> false
[3] pry(main)> u.attributes = { email: "bob@test.com" }
=> {:email=>"bob@test.com"}
[4] pry(main)> u.changed?
=> false
[5] pry(main)> u.email
=> "bob@test.com"
[6] pry(main)> u.attributes = { email: "alice@test.com" }
=> {:email=>"alice@test.com"}
[7] pry(main)> u.changed?
=> true
[8] pry(main)> u.email
=> "alice@test.com"
[9] pry(main)> u.save
=> true
应用于您的代码段时。
def update
@client.attributes = client_params
if @client.changed? && @client.save
redirect_to @client, notice: 'Client was successfully updated.'
else
render :edit
end
end
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。