代码之家  ›  专栏  ›  技术社区  ›  user6447029

如何从我的模型中获取一个方法,并在部分中执行?

  •  0
  • user6447029  · 技术社区  · 9 年前

    我正在使用Rails 4.2.7

    <%= @my_object_time.my_object.address.formatted %>
    

    我在app/models/address.rb中定义了这个方法

    class Address < ActiveRecord::Base
      belongs_to :state
      belongs_to :country
      has_one :user  # , dependent: :destroy
      has_one :race
    
      def self.formatted
        str = ""
        if self.city && !self.city.empty?
          str = "#{city}"
        end
        if self.state
          str = str.empty? ? "#{state.iso}" : "#{str}, #{state.iso}"
        end
        if self.country
          str = str.empty? ? "#{country.name}" : "#{str}, #{country.name}"
        end
        str
      end
    

    然而,当我调用partial时,我会得到以下错误

    ActionView::Template::Error (undefined method `formatted' for #<Address:0x007fb062e31fb0>):
    

    1 回复  |  直到 9 年前
        1
  •  1
  •   SteveTurczyn    9 年前

    你有 formatted 定义为类方法。。。

      def self.formatted
        str = ""
        if self.city && !self.city.empty?
          str = "#{city}"
        end
        if self.state
          str = str.empty? ? "#{state.iso}" : "#{str}, #{state.iso}"
        end
        if self.country
          str = str.empty? ? "#{country.name}" : "#{str}, #{country.name}"
        end
        str
      end
    

    您需要的是实例方法。另外,你不需要所有这些 self 前缀。

      def formatted
        str = ""
        if city && !city.empty?
          str = "#{city}"
        end
        if state
          str = str.empty? ? "#{state.iso}" : "#{str}, #{state.iso}"
        end
        if country
          str = str.empty? ? "#{country.name}" : "#{str}, #{country.name}"
        end
        str
      end