我有两个模型,它们之间具有 has_one 关系。Event
"has_one"的类Location
。我想要实现的是我创建一个事件的形式,我有一个“在哪里?” 通过 Foursquare API 异步填充的字段。
因为我不可能将整个 Foursquare API 迁移到我自己的数据库中,所以我想在事件中第一次提到位置时在我的数据库中生成一个 Location 条目。
目前我正在寻找的结果已经完成,但我认为我正在使用许多隐藏字段和许多 javascript 分配。有没有比我用来达到相同结果的更好的做法?
新的.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