我想在再次创建之前检查域主机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
答案 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?