1

私の見解では、属性<%= f.text_field :latlon %>を編集するためにを使用していlatlonます(ActiveRecord列ではありません)。保存するときに、それを解析してコールバックlatlongに分割しlatたいと思います。lonbefore_save

latlonコールバック内の変数のパラメーターにアクセスする方法がわかりません。私は試しましたが、それはand属性と同じようにself.latlong呼び出します。attr_readerlatlon

これはコントローラーで実行できることはわかっていますが、これはモデルロジックですよね?

#app/models/bla.rb
class Bla < ActiveRecord::Base
  attr_accessible :name, :lat, :lon, :latlon #but latlon is not an ActiveRecord Attribute

  before_save :foo

  def latlon
    "#{lat}, #{lon}"
  end

  attr_writer latlon

  private

  def foo
    self.lat = # regex that parse latlon
    self.lon = # regex that pase coors
  end

end
4

3 に答える 3

3

割り当てメソッドをオーバーライドして、説明していることを実行できます。これには、単体テストがより速く/より簡単になるという利点があります。

def latlon=(new_value)
  # do work to split and assign
end
于 2012-11-30T21:39:08.613 に答える
1

私はあなたが置き換えるかもしれないと思いattr_writer latlonます

def latlon=(latlon)
  self.lat = # regex that parses lat from latlon
  self.lon = # regex that parses lon from latlon
end

また、:latと:lonは、配列 attr_accessibleから大量に割り当てられることはないため、の一部にしないでください。コントローラから渡された値には、値が含まれます(正しくフォーマットされています)。paramsparamslatlon

before_saveこの場合、は必要ないと思います。

于 2012-11-30T21:40:09.660 に答える
0

モデルは、使用できるインスタンス変数にアクセスできる必要があります@latlonよね?

于 2012-11-30T21:28:34.750 に答える