使用标准的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
执行此操作答案 0 :(得分:15)
想出来。你只需要添加这个:
:input_html => {"data-remote" => true, "data-url" => "/yoururl", "data-type" => :json}
答案 1 :(得分:6)
我想发布一个相关的跟进,因为我很难搞清楚如何为此实现回调。我发现这篇文章非常有用:http://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3/
秘诀是要添加HTML5数据属性,例如data-complete
或(更好)将Rails提供的ajax:complete
或ajax: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);
});
});
CoffeeScript示例:
$("#new_post").on("ajax:success", (e, data, status, xhr)->
console.log data
)
答案 2 :(得分:6)
最好这样写:
= 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
时,它将只取代给定的网址。
答案 3 :(得分: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
答案 4 :(得分: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哈希值,但这也适用于此。