从具有和不具有self的控制器调用模型方法



我的模型中有两个方法。两者的功能相同,但如何将其简化为一种方法。我必须从控制器调用这个模型方法。在一个基于id的调用中,一个没有id。这是我对模型的控制器方法调用

def get_mages
@url = MyTable.find(params[:id])
if @url
render partial: "home/my_partial", locals: {:images => @url.images, :site_url => @url.site_url}
else
@url = params[:site_url]
render partial: "home/my_partial", locals: {:images => MyTable.live_images(@url), :site_url => @url}
end
end

这是我的模型函数

class MyTable < ActiveRecord::Base
def images
images = []
agent = Mechanize.new
page = agent.get(site_url)
page.images.each do |image|
images << {url: image}
end    
images
end

def self.live_images(site_url)
images = []
agent = Mechanize.new
page = agent.get(site_url)
page.images.each do |image|
images << {url: image}
end    
images
end
end

将两种模型方法(图像和self.live_images(site_url((合二为一的任何方法。任何帮助都是值得赞赏的。

您可以使用实例方法中的class方法,避免重复:

class MyTable < ActiveRecord::Base
def images
self.class.live_images(site_url)
end

def self.live_images(site_url)
Mechanize.new.get(site_url).images.map do |image|
{url: image}
end    
end
end

在控制器中,只需根据MyTable记录是否存在来调节url和图像:

def get_mages
table = MyTable.find(params[:id])
@url = params[:site_url]
@url = table.site_url if table.present?
images = if table.present?
table.images
else
MyTable.live_images(@url)
end
render partial: "home/my_partial", locals: { images: images, site_url: @url }
end

最新更新