这就是我所拥有的
我的bookmarks_controller.rb
def fetch
@result = LinkThumbnailer.generate(params[:url])
end
我有以下表单字段来创建新书签
所以我的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功能。
有人可以帮我这个吗?
三江源
答案 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>