Rails 4 - 如何在表单中填充远程内容?

时间:2014-03-06 21:28:23

标签: ruby-on-rails ruby ruby-on-rails-4

这就是我所拥有的

我的bookmarks_controller.rb

中有这样的方法
def fetch
   @result = LinkThumbnailer.generate(params[:url])
end

我有以下表单字段来创建新书签

  1. URL
  2. 标题
  3. 描述
  4. 缩略图
  5. 标记
  6. 所以我的new.html.erb看起来像这样

    <%= form_for(@bookmark, :html => {class: "panel-body"}) do |f| %>
        <% if @bookmark.errors.any? %>
            <div id="error_explanation">
              <h2><%= pluralize(@bookmark.errors.count, "error") %> prohibited this bookmark from being saved:</h2>
    
              <ul>
                <% @bookmark.errors.full_messages.each do |msg| %>
                    <li><%= msg %></li>
                <% end %>
              </ul>
            </div>
        <% end %>
    
        <div class="block">
          <%= f.label :url, :class => 'control-label' %>
          <%= f.text_field :url, :class => 'form-control', :placeholder => 'URL' %>
        </div>
        <div class="block">
          <%= f.label :title, :class => 'control-label' %>
          <%= f.text_field :title, :class => 'form-control', :placeholder => 'Title' %>
        </div>
        <div class="block">
          <%= f.label :description, :class => 'control-label' %>
          <%= f.text_area :description, rows: 6, :class => 'form-control', :placeholder => 'Description' %>
        </div>
        <div class="block">
          <%= f.label :thumbnail, :class => 'control-label' %>
          <%= f.text_field :thumbnail, :class => 'form-control', :placeholder => 'Thumbnail url' %>
        </div>
        <div class="block">
          <%= f.label :tag_list, :class => 'control-label' %>
          <%= f.text_field :tag_list, :class => 'form-control', :placeholder => 'Tags (separated by commas)' %>
        </div>
        <div class="actions">
          <%= f.submit :class => "btn btn-info" %>
        </div>
    <% end %>
    

    我希望在Fetch字段旁边有一个名为url的按钮。

    当用户点击Fetch按钮时,我想使用ajax填充表单字段。

    我查看了rails文档。它表示要在表单中添加remote: true属性。

    但我想只在用户点击获取按钮时使用ajax功能。

    有人可以帮我这个吗?

    三江源

1 个答案:

答案 0 :(得分:1)

您可以使用LinkThumbnailer gem生成对象,然后将其转换为json 采取这一行动:

   def fetch
     @result = LinkThumbnailer.generate(params['given_url'])

     respond_to do |format|
       format.json do 
         result.to_json
       end
     end
   end

在您的视图中,您可以使用Jquery getJSON方法访问#fetch操作并将给定的url作为参数传递:

 <script type="text/javascript">
   require(['jquery'], function($) {
     $('.fetch-button-class').change(function() {

       var given_url = $('.url-class').val();
       $.getJSON('<%= fetch_action_url %>', {'given_url': given_url }, function(obj) {

         $('.title-class').val(object.title);
         $('.description-class').val(object.description);
       });
     });
   });
 </script>