0

location 属性を持つモデルがあります。これは 2 つの要素の配列です。緯度と経度。このような場所のアクセサーを定義します

class Address
    include Mongoid::Document
    include Mongoid::Timestamps
    include Mongoid::Spacial::Document

    field :location,        :type => Array,    spacial: {lat: :latitude, lng: :longitude, return_array: true }


    #accessors for location


    def latitude
        location[0]
    end

    def latitude=( lat )
        location[0] = latitude
    end

    def longitude
        location[1]
    end

    def longitude=( lng )
        location[1] = lng
    end
    attr_accessible :location, :latitude, :longitude

end

ここにコントローラーコードがあります

def create
        @address = Address.new(params[:address])
        if @address.save
            redirect_to :action => 'index'
        else
            render :action => 'new'
        end
    end

    def update
        @address = Address.find(params[:id])

        if @address.update_attributes(params[:address])
            redirect_to :action => 'index'
        else
            render :action => 'edit'
        end

    end

そしてビューレベルで

<%= f.hidden_field :latitude%>
<%= f.hidden_field :longitude%>

これらの隠しフィールドは js を介して操作されますが、それで問題ありません。開発者ツールを表示するのを見ました

コントローラーが受け取るパラメーターは次のとおりです。

"address"=>{"latitude"=>"-38.0112418", "longitude"=>"-57.53713060000001", "city_id"=>"504caba825ef893715000001", "street"=>"alte. brown", "number"=>"1234", "phone"=>"223 4568965"}, "commit"=>"Guardar", "id"=>"504cacc825ef893715000006"}

緯度と経度のパラメーターが変更されたので問題ありませんが、この変更はmongodbに保存されないことに注意してください

そのため、緯度と経度の値は保存されません。私のコードに欠けている指示はありますか?

前もって感謝します。

- - 編集 - -

ここに作業アクセサがあります

    def latitude
        location[0]
    end

    def latitude=( lat )
        self.location = [lat,self.location[1]]
    end

    def longitude
        location[1]
    end

    def longitude=( lng )
        self.location = [self.location[0], lng]
    end
4

1 に答える 1

0

データベースのフィールドを設定する場合は、self常に安全な方法を使用してください。これは良い習慣です。

次に、セッターに渡す引数を使用する必要があります。

結果のコード:

def latitude
  location[0]
end

def latitude=( lat )
  self.location[0] = lat
end

def longitude
  location[1]
end

def longitude=( lng )
  self.location[1] = lng
end
于 2012-09-09T17:54:47.977 に答える