has_one 関係を持つ 2 つのモデルがあります。Event
"has_one"のクラスLocation
。私が達成しようとしているのは、イベントを作成するという形です。「どこで?」Foursquare API を介して非同期に入力されるフィールド。
Foursquare API 全体を自分のデータベースに移行することはおそらく不可能だったので、イベントで場所が初めて言及されたときに、データベースに場所エントリを生成したいと考えています。
現時点では、探している結果が完成していますが、多くの非表示フィールドと多くの JavaScript 割り当てを使用していると思います。同じ結果を得るために使用している方法よりも優れた方法はありますか?
new.html.erb
<%= form_for :event, :url=> new_event_path, :method => :get, :remote => :true, :html => {:class => 'form-horizontal'} do |f| %>
<%= fields_for :location do |f1|%>
<%= f1.hidden_field :lat, :id=> 'foursquare-latitude' %>
<%= f1.hidden_field :lng, :id => 'foursquare-longitude' %>
<%= f1.hidden_field :foursquare_id, :id =>'foursquare-id' %>
<%= f1.hidden_field :name, :id =>'location-name-field' %>
<% end %>
<!-- TODO Encapsulate in location model -->
<%= f.hidden_field :latitude, :id=>'latitude-field' %>
<%= f.hidden_field :longitude, :id=>'longitude-field' %>
<div class="control-group">
<%= f.label :title , :class => "control-label" %>
<div class="controls">
<%= f.text_field :title %>
</div>
</div>
<div class="control-group">
<label class="control-label" for="location">Where?</label>
<div class="controls">
<input type="text" id="location" data-provide="typeahead">
<br/>
<img src="../img/fsq.png" alt="Powered By Foursquare" width="240px" />
</div>
</div>
<div class="control-group">
<%= f.label :body, :class => "control-label" %>
<div class="controls">
<%= f.text_area :body, :rows => 6 %>
</div>
</div>
<div class="control-group">
<div class="controls">
<%= f.submit %>
</div>
</div>
<% end %>
イベントコントローラー
def new
@location = Location.new(params[:location])
if @location.save
@event = Event.new(params[:event])
@event.author = current_user
@event.location_id = @location.id
respond_to do |format|
if @event.save
format.js {render :action => "new"}
else
format.js {render :action => "new"}
end
end
end
end