8

使用标准 Rails form_for,我能够通过 select 和 collection_select 帮助器传递 ajax 请求,如下所示:

<%= address.collection_select :country, @countries, :id, :name, {:include_blank => false}, "data-remote" => true, "data-url" => "/ajax/states", "data-type" => :json  %>

我似乎无法弄清楚如何用simple_form做到这一点

4

5 回答 5

15

弄清楚了。你只需要添加这个:

:input_html => {"data-remote" => true, "data-url" => "/yoururl", "data-type" => :json}
于 2012-04-21T00:59:41.133 回答
9

最好这样写:

= simple_form_for sample_result, url: reject_sample_result_path(sample_result), method: :post, remote: true, input_html: {multipart: true} do |f|

当您明确声明data-url时,它仍将首先进行默认路由计算,在我的情况下失败,因为默认路由不存在(并且不应该存在——因为我否决了 url)。当您声明 justurl时,它只会采用给定的 url。

于 2014-06-13T08:38:29.820 回答
6

我想发布一个相关的跟进,因为我在弄清楚如何为此实现回调时遇到了一些困难。我发现这篇文章很有帮助:http ://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3/

秘诀是添加一个 HTML5 数据属性,例如,data-complete或者(更好地)将 Rails 提供的ajax:completeajax:success回调绑定到您的表单(参见上面链接的文章中的 4. 远程 JavaScript 回调):

来自文章:

jQuery(function($) {
  // create a convenient toggleLoading function
  var toggleLoading = function() { $("#loading").toggle() };

  $("#tool-form")
    .bind("ajax:loading",  toggleLoading)
    .bind("ajax:complete", toggleLoading)
    .bind("ajax:success", function(event, data, status, xhr) {
      $("#response").html(data);
    });
});

咖啡脚本示例:

$("#new_post").on("ajax:success", (e, data, status, xhr)->
  console.log data
)
于 2013-07-02T13:54:22.730 回答
2

现在看来,这样做的有效方法是:

:remote => true, :html => { :data => { :url => '/yoururl', :type => :json } }

使用 ruby​​ 1.9 哈希语法可能看起来更好一些:

remote: true, html: { data: { url: '/yoururl', type: :json } }

https://github.com/plataformatec/simple_form/wiki/HTML5-Attributes

于 2013-01-21T20:46:41.967 回答
1

我发现的最简单的方法是:

在您看来:

<%= simple_form_for :my_object, url: my_objects_path(format: :json), remote: true do |f| %>
  <%= f.error_notification %>
  <%= f.input :an_attribute %>
  <%= f.submit %>
<% end %>

在你的控制器中:

def create
  @my_object = MyObject.new(my_object_params)
  if @my_object.save
    respond_to do |format|
      format.html { redirect_to @my_object, notice: "Saved" }
      format.json { render json: @my_object, location: my_object_url(@object), status: :created }
    end
  else
    respond_to do |format|
      format.html { render :edit }
      format.json {render json: @my_object, status: :unprocessable_entity }
    end
  end
end

在 Rails 5 中,安装了 Jbuilder 的控制器更容易创建简单的 json 哈希,但这也应该在那里工作。

于 2016-12-02T22:10:35.863 回答