lat / long在Rails中使用form_for进行坐标插入

时间:2014-06-06 12:56:16

标签: ruby-on-rails spatial form-for mysql2 rgeo

我正在使用Rails 4.4.1,Ruby 2.1.2,RGeo 0.3.20和activerecord-mysql2spatial-adapter 0.4.3

我的问题可能很简单,因为我是Ruby和Rails的新手,但到目前为止我在网上找不到任何有用的东西。

我想创建一个表单来在我的数据库中插入地理空间坐标,但我不知道如何访问:latlon字段x和y。这是我的暂定代码:

<h1>Inserimento nuova Città</h1>
<%= form_for @city, url: cities_path do |city| %>
    <p>
        <%= city.label :name, "Nome"%><br>
        <%= city.text_field :name %>
    </p>

    <p>
        <%= city.label :latlon, "Coordinate GPS" %><br>
        <%= city.number_field :latlon.x %><br>
        <%= city.number_field :latlon.y %><br>
    </p>
<% end %>

访问localhost时遇到的错误:3000 / cities / new url

undefined method `x' for :latlon:Symbol

任何人都知道如何创建表单以在我的数据库中插入latlon.x和latlon.y数据?

1 个答案:

答案 0 :(得分:2)

您无法拨打city.number_field :latlon.y,因为此处:latlon只是一个符号 - 它告诉助手拨打&#34; latlon&#34;方法,并将名称设置为&#34; city [latlon]&#34;。

解决此问题的一种方法是为各个x / y值添加get和set方法。这些可能已经存在,由宝石添加,我不知道,因为我没有使用它。但你可以添加

class City < ActiveRecord::Base
  def latlon_x
    self.latlon.x
  end

  def latlon_y
    self.latlon.y
  end

  def latlon_x=(num)
    self.latlon.x = num
  end

  def latlon_y=(num)
    self.latlon.y = num
  end

现在你可以用你的形式说,

    <%= city.number_field :latlon_x %><br>
    <%= city.number_field :latlon_y %><br>

这将使用latlon_x来获取值,并在更新操作中执行latlon_x=时调用@city.update_attributes(params[:city])