1

2 つのモデルを同時に作成するネストされたフォーム レールを作成しようとしています。モデルは次のとおりです。

モデル/イベント

#Data
  attr_accessible :customer_id, :description, :locations_attributes
#Relationship
  has_many :locations
  accepts_nested_attributes_for :locations, :allow_destroy => true

モデル/場所

#Data
  attr_accessible :address, :customer_id, :event_id, :latitude, :longitude
#Relationship
  belongs_to :customer
  belongs_to :event

彼の景色はこんな感じ

<%= form_for(@event) do |f| %>
  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <%= f.fields_for :locations do |e| %>
    <%= e.hidden_field :longitude %>
    <%= e.hidden_field :latitude %>
  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

コントローラーはこんな感じ

  def new
    @event = Event.new
    @location = Location.new
    ...
  def create
    @event = current_customer.events.build(params[:event])
    @event.locations.build(params[:locations])
    respond_to do |format|
    ...

問題は、イベントを作成すると、フォームが生成され、イベントが作成され、場所が作成され、イベントに関連付けられることですが、経度と緯度のフィールドが空です。float 型であることに注意する必要がありますが、なぜ機能しないのかわかりません

更新: field_for にアクセスできることに気付きました。field_for を single に変更する必要があります

 <%= f.fields_for :location do |e| %>

しかし、これを行うと、イベントを作成しようとすると次のエラーが発生します

Can't mass-assign protected attributes: location

パラメータは次のとおりです

 "location"=>{"longitude"=>"-80.9460917",
 "latitude"=>"46.4350391"}

これは私のjavascriptです

function getLocation()
{
    if (navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(showPosition);
    }
}
    function showPosition(position)
    {
        document.getElementById('event_location_latitude').value=position.coords.latitude;
        document.getElementById('event_location_longitude').value=position.coords.longitude;
    }

私はそれが醜いことを認めますが、それは私がフォームの関数でそれを呼び出したapplication.jsからの仕事をします

<script type="text/javascript">
   getLocation();
  </script>

フォームの <% end %> の直前

4

2 に答える 2

0

これをチェックしてください。

http://railscasts.com/episodes/196-nested-model-form-revised

それを見た後に質問がある場合。お知らせ下さい

非表示のフィールドコードで、値を設定する必要があります。例えば。

<%= f.hidden_field :song_id, value: params[:id] %>
<%= f.hidden_field :paid_price,  value: @song.price %>
于 2013-01-05T04:52:07.920 に答える