0

我有两个模型,它们之间具有 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
4

0 回答 0