私のアプリでは、OmniContacts gem を使用して、ユーザーが連絡先をインポートできるようにしています。これは機能します。Gmail の連絡先を取得するには、約 300 ~ 500 ミリ秒かかります。
連絡先をインポートできるようにするために、連絡先をネストされた形式にしています。現在、各連絡先のレンダリングには 175 ~ 300 ミリ秒かかります。これに 1000 を掛けると、ひどい結果になります。
この問題に対する Rails ソリューションがあれば幸いです。それ以外の場合は、AJAX を使用していると推測しており、JS フォームが機能する可能性があります。あなたの考えと時間は大歓迎です。
コントローラーのインポート:
def import
@user = current_user
@import = request.env['omnicontacts.contacts']
@contacts = @import.map do |contact_info|
Contact.new(
first_name: contact_info[:first_name],
last_name: contact_info[:last_name],
email_home: contact_info[:email],
phone_home: contact_info[:phone]
)
end
respond_to do |format|
format.html
end
end
ビューのインポート:
<div class="row">
<div class="small-12">
<%= simple_form_for(@user, url: import_path) do |f| %>
<%= f.simple_fields_for :contacts, @contacts do |contact| %>
<%= render 'contact_fields', f: contact %>
<% end %>
<div class="actions" align="right">
<%= f.submit class:"button tiny" %>
</div>
<% end %>
</div>
</div>
ネストされたフォーム部分:
<div class='nested-fields'>
<fieldset>
<div class="row">
<div class="small-2 columns">
<%= f.input :import, as: :boolean %>
</div>
<div class="small-2 columns">
<%= f.input :first_name %>
</div>
<div class="small-2 columns">
<%= f.input :last_name %>
</div>
<div class="small-4 columns">
<%= f.input :email_home %>
</div>
<div class="small-2 columns">
<%= f.input :phone_home %>
</div>
</div>
</fieldset>
</div>
Log of Doom: (目を閉じて、1000 以上のレンダリングされた行が追加されたことを想像してください)
Started GET "/oauth2callback?code=4/XzHDNPJ8RgRb7SFStQ3tVM-ff2q5WolrVHTsokI0egg" for ::1 at 2015-06-18 12:16:09 -0500
Processing by ImportsController#import as HTML
Parameters: {"code"=>"4/XzHDNPJ8RgRb7SFStQ3tVM-ff2q5WolrVHTsokI0egg"}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Rendered imports/_contact_fields.html.erb (301.0ms)
Rendered imports/_contact_fields.html.erb (233.9ms)
Rendered imports/_contact_fields.html.erb (276.8ms)
Rendered imports/_contact_fields.html.erb (180.3ms)
Rendered imports/import.html.erb within layouts/application (1001.0ms)
Rendered layouts/_header.html.erb (2.8ms)
Rendered layouts/_footer.html.erb (3.8ms)
Completed 200 OK in 1548ms (Views: 1540.0ms | ActiveRecord: 0.5ms)