我試圖在我的應用程序上使自定義驗證程序工作。Rails 3 - 自定義驗證程序
我已經配置好我的config.autoload.paths
,它加載正常。
問題出在驗證器本身。
結果的binding pry
instance variables: @attributes @options @with
locals: _ _dir_ _ex_ _file_ _in_ _out_ _pry_ attribute record value
[12] pry(#<FileCountValidator>)> value
=> [#<Attachment id: 60, description: nil, file: "cache_600_1__img_948867_5770137d84a6c79ac825886938e...", attachable_type: "Post", attachable_id: 15, created_at: "2012-03-10 14:50:54", updated_at: "2012-03-10 14:50:54">,
#<Attachment id: 61, description: nil, file: "cache_600_1__img_948867_90f64e01b9c871ec656a884e015...", attachable_type: "Post", attachable_id: 15, created_at: "2012-03-10 14:50:54", updated_at: "2012-03-10 14:50:54">,
#<Attachment id: 62, description: nil, file: "cache_600_1__img_948867_85eda3946c27fa90566403ac941...", attachable_type: "Post", attachable_id: 15, created_at: "2012-03-10 14:50:54", updated_at: "2012-03-10 14:50:54">,
#<Attachment id: nil, description: nil, file: nil, attachable_type: "Post", attachable_id: 15, created_at: nil, updated_at: nil>]
[13] pry(#<FileCountValidator>)> value > @with
TypeError: compared with non class/module
from /home/kleber/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.1/lib/active_record/relation/delegation.rb:20:in `>'
[14] pry(#<FileCountValidator>)> value.size > @with
=> true
[15] pry(#<FileCountValidator>)> value.size
=> 4
[16] pry(#<FileCountValidator>)> @with
=> 3
[17] pry(#<FileCountValidator>)>
所以,我試圖讓這個comparisson正是像我一樣的撬調試控制檯上。
def validate_each(record, attribute, value)
#binding.pry
record.errors.add(attribute,"#{@with} attachments per post only. #{attribute['file'].size} detected.") if value.size > @with
end
但這樣做,返回我的錯誤:
NoMethodError (undefined method `size' for nil:NilClass):
lib/validators/file_count_validator.rb:11:in `validate_each'
app/controllers/posts_controller.rb:61:in `block in update'
app/controllers/posts_controller.rb:60:in `update'
還有什麼辦法趕value
它獲得進入validate_each
方法之前?
什麼'size.inspect'&'value.inspect'顯示第一個驗證? – ScottJShea 2012-03-08 23:26:49
@ScottJShea請看看我上面的編輯。 – 2012-03-09 05:45:51
'nil:NilClass'的undefined方法大小應該歸屬於'attribute ['file']。size'。我認爲你不需要使用它,而是使用'value.size'作爲'record.errors.add(attribute,「#每個帖子的#{@ with}附件,#{value.size}檢測到的)。 value.size> @ with' – prasvin 2012-03-10 15:21:34