gpt4 book ai didi

ruby-on-rails - 在 Rails 4 的 Controller 中添加验证错误

转载 作者:数据小太阳 更新时间:2023-10-29 07:59:09 25 4
gpt4 key购买 nike

在 Controller 中我有一个不与模型直接关联的代码:

def create

var1 = get_some_post_param
# check if var1 isn't nil -- how to add an error the model if it is?

# some other code...
@m = Model.new(field1: var1, field2: var2, field3: var3)
if @m.save
# ok
#....
else
# error
...
end
end

如果 var1 为 nil,我如何在 var1 = get_some_post_param 之后立即向模型添加验证错误?

最佳答案

首先,我认为您不能直接在 Controller 中执行此操作。

您可以将非模型 var1 属性关联到您的任何一个模型属性(这可以是用于此目的的新属性,例如:special_var1)。

然后在你的 Controller 中你可以:

  before_action :set_special_var1

def set_special_var1
var1 = get_some_post_param
@m.special_var1 = var1
end

然后,在您的模型中,您可以添加一个自定义验证器:

# model.rb
validate :special_var1_is_not_nil

private

def special_var1_is_not_nil
if self.special_var1.nil?
errors.add(:special_var1, 'special_var1 is nil')
end
end

或者,你也可以试试:

validates :special_var1, allow_nil: false

但是,这些验证将在对象被持久化之前调用,例如当你调用:@m.save,而不是在那之前。

更新

你能在你的 Controller 中做的最好的事情是,在你的 Controller 中有一个 before_action 然后如果 var1nil 则重定向到某个页面:

before_action :check_var1

private

def check_var1
var1 = get_some_post_param
unless var1
redirect_to "index", notice: "Invalid var1"
end
end

参见 this post供引用。

关于ruby-on-rails - 在 Rails 4 的 Controller 中添加验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33516942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com