我的应用程序有一个form_for标记,其元素:foo未保存在form_for中使用的对象的模型中。
我需要使用Rails Validation Helpers确认用户是否为此元素提交了值。但是,'presence'验证器调用object.foo来确认它有一个值。由于foo未保存为我的对象的一部分,我该如何进行此验证呢?
谢谢!
答案 0 :(得分:2)
您可能应该在控制器操作的params
中检查它是否存在:
def create
@model = MyModel.find(params[:id])
unless params[:foo].present?
@model.errors.add(:foo, "You need more foo")
end
# ...
end
如果:foo
是您的对象的属性未保存在数据库中并且您确实想要使用ActiveRecord Validations,则可以为其创建attr_accessor
,并验证此类状态。
class MyModel < ActiveRecord::Base
attr_accessor :foo
validates :foo, presence: true
end
但这可能导致保存无效记录,因此您可能不希望这样做。
答案 1 :(得分:1)
试试这个..
class SearchController < ApplicationController
include ActiveModel::ForbiddenAttributesProtection
def create
# Doesn't have to be an ActiveRecord model
@results = Search.create(search_params)
respond_with @results
end
private
def search_params
# This will ensure that you have :start_time and :end_time, but will allow :foo and :bar
params.require(:val1, :foo).permit(:foo, :bar , whatever else)
end
end
class Search < ActiveRecord::Base
validates :presence_of_foo
private
def presence_of_foo
errors.add(:foo, "should be foo") if (foo.empty?)
end
end
查看更多here