2

我正在使用 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 数据?

4

1 回答 1

2

你不能调用city.number_field :latlon.y,因为这里:latlon只是一个符号——它告诉助手调用“latlon”方法,并将名称设置为“city[latlon]”。

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

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])

于 2014-06-06T14:51:28.237 回答