【问题标题】:How do I get a method from my model executed in a partial?如何从部分执行的模型中获取方法?
【发布时间】:2017-02-19 02:48:00
【问题描述】:

我使用的是 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

但是,当我调用部分时,我得到了这个错误

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

如何更正上述错误以执行我的方法的逻辑?我也尝试了“格式化”而不是“self.formatted”,但得到了同样的错误。

【问题讨论】:

  • 方法formatted是一个类方法。通过删除self,将其更改为实例方法,即def formatted

标签: ruby-on-rails ruby methods model partial


【解决方案1】:

您已将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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多