编写一个 ROR 应用程序,其中单个数据库字段(经度)将显示为多个屏幕字段(long_degrees、long_minutes、long_seconds、long_direction)。我目前正在尝试在没有 scuccees 的情况下向模型添加编辑。
我正在使用 gem geo_position 来存储经度和纬度。
我得到的具体错误是我无法访问模型中的屏幕字段。在下面显示的代码中,将显示(注释为导致错误)我如何尝试访问模型中的字段。我尝试了各种 IF 语句,但均未成功。
MVC
1- 模型 - 钻头
class Drill < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection
...
validate :validate_longitude
def validate_longitude
# if self.long.degrees > 180
# if long.degrees > 180
# if
# line above causes error
# errors.add(self.lat.degrees, "Degrees must be between 0 and 180")
# end
end
使用第一行“如果测试测试我得到以下错误 undefined method `long' for #
2- 视图 - _form
....
<%= "Longitude - degrees " %>
<% if @drill.longitude%>
<%= f.fields_for :long do |m| %>
<%= m.input_field :degrees, as: :integer, value: longitude(@drill).degrees %>
<%= "minutes "%>
<%= m.input_field :minutes, as: :integer, value: longitude(@drill).minutes %>
<%= "seconds "%>
<%= m.input_field :seconds, as: :decimal, value: longitude(@drill).seconds %>
<%= "direction "%>
<%= m.input_field :direction, collection: %w{W E}, as: :select, selected: longitude(@drill).direction, include_blank: false %>
<% end %>
<% else %>
<%= f.fields_for :long do |m| %>
<%= m.input_field :degrees, as: :integer, value: '' %>
<%= "minutes "%>
<%= m.input_field :minutes, as: :integer, value: '' %>
<%= "seconds "%>
<%= m.input_field :seconds, as: :decimal, value: '' %>
<%= "direction "%>
<%= m.input_field :direction, collection: %w{W E}, as: :select, include_blank: false %>
<% end %>
在 Controller 类中 DrillsController < ApplicationController before_filter :load_drill,除了:[:index, :new, :create]
def index
@drills = Drill.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @drills }
end
end
...
private
def drill_params
params.require(:drill).permit(:name, :country_id,:state_id, :basin_id,
:directional_offset_metres, :ground_level_elevation_metres,
:rotary_table_elevation_metres, :lat, :long, :sub_basin_structure_ids=>[] )
end
...
非常感谢皮埃尔
数据库虚拟属性是名称 long(一个也用于纬度),数据库列称为经度。数据库列存储为 longitude = "19 deg 19' 19.19" W" 并显示为经度 - 度 19 分 19 秒 19.19 方向 W