【问题标题】:The provided regular expression is using multiline anchors (^ or $)? [duplicate]提供的正则表达式使用多行锚(^ 或 $)? [复制]
【发布时间】:2014-03-24 15:44:27
【问题描述】:

我收到一个错误:

The provided regular expression is using multiline anchors (^ or $).  Did you mean to use \A and \z, or forgot to add the :multiline => true option? 

在我的 Rails 应用程序中仅加载一页时。

它突出显示它正在使用的模型,说错误是:

class Associate < Locations::Associate

这是模型:

class Associate < Locations::Associate

 # Returns an array of permissions which are valid at the associate level.
 #
 def self.associate_permissions
  ASSOCIATE_PERMISSIONS
 end

 # Generates an array of permission values that can be used in the new or edit
 # template.
 #
 def permission_list
   my_permissions = (permissions || '').split(/,/)
   list = []
   Associate.associate_permissions.each do |value|
     list << {:label => value[0], :value => value[1], :checked => my_permissions.include?    (value[1])}
   end
   list
 end

end

控制器:

class AssociatesController < ApplicationController
  def index
    @associates = Associate.paginate :order => 'code',
                                     :page => params[:page], :per_page => 50
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @associates }
   end
 end

end

谁能告诉我如何解决这个错误?

【问题讨论】:

  • 将相关行粘贴到您的模型中。
  • 我做到了。 Rails 指出错误位于:class Associate &lt; Locations::Associate
  • @Tony Shier 您必须包含出现错误的行的内容。您只包含一个空模型。
  • 将这个:(?m)(?:&lt;provided regular expression&gt;) 添加到您的正则表达式中。
  • 更新了模型的代码。

标签: ruby regex ruby-on-rails-4 model


【解决方案1】:

我假设您在渲染索引视图时遇到了错误。

使用

更新index操作
@associates = Associate.order('code').paginate(:page => params[:page], :per_page => 50)

而不是

@associates = Associate.paginate :order => 'code',
                                     :page => params[:page], :per_page => 50

【讨论】:

  • 感谢您提供更短的代码。可悲的是,它无济于事。
  • 您仍然遇到同样的错误?如果是这样,请包括有问题的完整错误堆栈跟踪。那会很有帮助。同时,完成类Associate 定义。
  • 您在呈现索引页面或创建/更新记录时遇到错误?分享问题中的相关代码。
  • 更新了模型的代码。修订:2
【解决方案2】:

我发现了我的问题。我有一个可以运行我大部分模型的 gem。在我拥有的 gems 模型中:

class Locations::Associate < Locations::Database
  require 'digest'

  attr_accessible :code, :email, :include_on_reports, :name,
                  :permissions, :phone, :writer

  has_many :associate_branches, :dependent => :destroy

  validates :code, :presence => true, :uniqueness => true,
                   :format => { with: /^[A-Z]{3}\d{4}$/, on: :create }

.....
end

我不得不将正则表达式更改为:

validates :code, :presence => true, :uniqueness => true,
                   :format => { with: /\A[A-Z]{3}\d{4}\z/, on: :create }

感谢所有帮助。

【讨论】:

  • 通常只有一个理由使用\A\z 代替$$。不知道您的情况是否属实,但这里是:通常隐含^$,因为它们可以在非多行模式下匹配\A\z。但是,如果还使用例如原始字符串的迭代器(指针)解析另一个正则表达式中的子字符串,则必须使用\A\z,因为它的范围仅限于段。不确定这是否是红宝石。 C++ 中的提升正则表达式通常使用迭代器来提高性能。
猜你喜欢
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多