在Rails 3 nested_attributes中,reject_if格式不是URL格式

时间:2013-12-17 17:20:47

标签: ruby-on-rails

您好我正在尝试验证nested_attributes,拒绝以正确的网址格式

这是我的reject_if代码:

  accepts_nested_attributes_for :campaign_posts, :allow_destroy => true, 
                                :reject_if => :bad_uri


  def bad_uri(attribute)
    attribute['post'] =~ URI::regexp(%w(http https))
  end

但是当我测试时,它并没有拒绝糟糕的输入......

我的update

中的campaigns_controller.rb行动仍在继续

造成这种错误:

URI::InvalidURIError (bad URI(is not URI?): ):
  app/controllers/campaigns_controller.rb:72:in `set_desc_provider_name'
  app/controllers/campaigns_controller.rb:155:in `block (2 levels) in update'
  app/controllers/campaigns_controller.rb:144:in `block in update'
  app/controllers/campaigns_controller.rb:142:in `update'

这只意味着拒绝运行不顺利。

PS:我有2个模型Campaign和Campaign Post

更新

如果URI不是URI,它在我的控制器中失败:

def get_parsed_data(p)
    # Parse URL
    provider = "http://api.embed.ly/1/oembed?url="
    url = (p.post).to_s
    resp = Net::HTTP.get_response(URI.parse(provider + url))
    data = resp.body
    @result = JSON.parse(data)
end

而且,我尝试将条件更改为!=,但它也不接受URL输入。它不接受非网址和网址

def bad_uri(attribute)
  attribute['post'] != URI::regexp(%w(http https))
end

0 个答案:

没有答案