我有一个while ((c = fgetc (fp)) != EOF) { /* for each char */
...
if (idx && !isdigit(c)) { /* if end of digits */
...
}
/* consider '.nnn' as 0 */
if (c == '.' && isdigit ((c = fgetc (fp)))) {
while (isdigit ((c = fgetc (fp)))) {}
arr[n++] = 0;
}
...
模型和一个Group
模型,每个模型都是HABTM。我正在尝试为我的主表单设置验证,即向某些组发送短信。现在我用Message
验证了消息正文,但工作正常但在我的Group模型中我想验证名称是否存在但是当我在调用create方法时如何让它们都验证消息控制器?我将展示我的代码以获得更多说明。
以下是presence: true
group.rb
现在 class Group < ActiveRecord::Base
has_and_belongs_to_many :people
has_and_belongs_to_many :messages
validates :name, presence: true
end
message.rb
这是我的class Message < ActiveRecord::Base
has_and_belongs_to_many :groups
validates :body, presence: true
end
message_controller.rb
为了更加理解,我希望我的表单显示“组不能为空”以及“正文不能为空”。如果没有选择任何内容。
答案 0 :(得分:2)
如果要在保存或收集所有错误之前验证多个模型,可以使用model.valid?
方法执行此操作。
它将返回true为false,具体取决于是否存在任何错误。错误将添加到model.errors
。
答案 1 :(得分:1)
首先想到使用valid?
,但还有另一种方法。
模型验证实际上内置了对协议的支持。
例如,
class Message
has_and_belongs_to_many :groups
validates :groups, presence: true
end
因此,如果邮件没有组,这会导致save
失败。
总有另一种方式 - 您可以覆盖内部调用的valid?
按save
。例如:
class Message
def valid?(*args)
original_result = super(*args)
if self.groups.empty?
self.errors_add(:groups, "cannot be empty")
return false
end
return original_result
end
end
validates :groups, presence: true
完成了同样的事情,
虽然我认为presence: true
也会验证外键引用
有效记录(而不仅仅是检查是否存在任何相关记录)。
调用valid?
会产生加载errors
对象的副作用。例如:
msg = Message.new
msg.errors.full_messages # => []
msg.valid? # => false
msg.errors.full_messages # => ["Name cant be blank", "Groups cant be blank"]
msg.save # => false