【问题标题】:Model method call from controller with and without self来自控制器的模型方法调用,带和不带 self
【发布时间】:2021-11-19 07:27:31
【问题描述】:

我的模型中有 2 种方法。两者的功能是相同的,但是如何将其简化为一种方法。我必须从控制器调用这个模型方法。在一个基于 id 的 Iam 调用中,一个没有 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))合二为一的任何方法。 任何帮助都是值得赞赏的。

【问题讨论】:

    标签: model controller ruby-on-rails-5 self


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2019-09-17
      • 2023-03-03
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多