我想在我的一个视图中检索ActiveRecord字段的maxmimum长度验证。
以下在rails控制台中正常工作并返回正确的值:
irb(main):046:0> micropost = Micropost.new
=> #<Micropost id: nil, content: nil, user_id: nil, created_at: nil, updated_at: nil>
irb(main):047:0> micropost._validators[:content][1].options[:maximum].to_s
=> "140"
但是,当我在控制器中使用相同的代码时,它返回nil:
class PagesController < ApplicationController
def home
@title = "Home"
if signed_in?
@micropost = Micropost.new
@feed_items = current_user.feed.paginate(:page => params[:page])
@content_max = @micropost._validators[:content][1].options[:maximum].to_s
end
end
...
end
我还尝试在我的ApplicationHelper中包含一个方法,该方法也返回nil; - (
def content_max
Micropost._validators[:content][1].options[:maximum].to_s
end
我做错了什么?
答案 0 :(得分:0)
无论您是在控制台中还是在Web请求中,_validators
数组的顺序可能不同。
Micropost._validators[:content].find {|v| v.class == ActiveModel::Validations::LengthValidator} .options[:maximum].to_s
应该做你想做的事。
恕我直言,更好的解决方案是将长度存储在常量中(我不知道_validators
数组是官方API的一部分):
class Micropost < ActiveRecord::Base
MAX_CONTENT_LENGTH = 140
validates :content, :length => {:maximum => MAX_CONTENT_LENGTH}
# Rest of the code...
end
并获得长度:
Micropost::MAX_CONTENT_LENGTH