0

単一のデータベース フィールド (経度) を複数の画面フィールド (long_degrees、long_minutes、long_seconds、long_direction) として表示する ROR アプリケーションを作成します。現在、成功せずにモデルに編集を追加しようとしています。

経度と緯度の両方を保存するために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

最初の行を使用すると、「If test test I gets the following error 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 %> 

コントローラ クラス 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
    ...

どうもありがとうピエール

データベースの仮想属性は長い名前 (緯度にも 1 つ) で、データベースの列は経度と呼ばれます。データベース列は経度 = "19 度 19' 19.19" W" として保存され、経度 - 度 19 分 19 秒 19.19 方向 W として表示されます。

4

0 に答える 0