我的模型中有两个方法。两者的功能相同,但如何将其简化为一种方法。我必须从控制器调用这个模型方法。在一个基于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