从有和没有自我的控制器调用模型方法

Model method call from controller with and without self

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