未定义的new_record? Ruby Rails

时间:2016-07-05 17:08:16

标签: ruby-on-rails ruby

我想在再次创建之前检查域主机url记录是否存在于域表中,但是我收到此错误:

undefined method `new_record?' for #<Domain::ActiveRecord_Relation:0x007f320ed8af80>

GetMeta类是一个服务对象,当用户在表单中输入URL并单击“提交”时,该对象将进行初始化。我从表单中获取URL并使用它调用MetaInspector以获取更多元信息。

第一部分(如果)new_record方法工作正常,但是在域表中创建重复值。我试图创建一个条件逻辑,但我遇到了这个我不知道如何修复的错误。

  class GetMeta
  include ActiveModel::Model

  def initialize(url)
    @url = url
  end

  def new_record

    page = MetaInspector.new(@url)
    @domain = Domain.where(:host => page.host)

    if new_record?
      Domain.create! do |url|
        url.root_url = page.root_url
        url.scheme = page.scheme
        url.host = page.host

        url.links.build(url: page.url, title: page.best_title, description: page.description)
      end
    else
      Link.create! do |link|
        link.url = page.url
        link.title = page.best_title
        link.description = page.description
      end
    end
  end

  private

  def new_record?
    @domain.new_record?
  end

end

2 个答案:

答案 0 :(得分:2)

问题由错误描述。我们来看看:

@domain = Domain.where(:host => page.host)

问题在于这条线 @domain = Domain.where(:host => page.host).last

这将返回ActiveRecord关系而不是单个记录。 你应该选择.first或.last。

exists?

这是修复,但让我们看看我们如何改进代码。

我们可以使用ActiveRecord Relation中定义的方法if Domain.exists?(host: page.host) Link.create! do |link| link.url = page.url link.title = page.best_title link.description = page.description end else Domain.create! do |url| url.root_url = page.root_url url.scheme = page.scheme url.host = page.host url.links.build(url: page.url, title: page.best_title, description: page.description) end end (文档:http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-exists-3F

@domain

这样我们就不需要实例变量new_record?和辅助方法Excel.run(function (ctx) { var chart = ctx.workbook.worksheets.getItem("mySheet").charts.getItem("myChart"); var biggerData = "A1:C4"; chart.setData(biggerData, "Columns"); return ctx.sync(); });

答案 1 :(得分:1)

您正在实例方法中调用实例方法。因此,您需要指定要引用的实例。你需要使用&#39; self&#39;。那么不要只是调用&#39; new_record?&#39;,尝试调用self.new_record?