8

標準のRailsform_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を上書きしているため、存在しないはずです)。宣言するurlと、代わりに指定されたURLが使用されます。

于 2014-06-13T08:38:29.820 に答える
6

このためのコールバックを実装する方法を理解するのに少し苦労したので、関連するフォローアップを投稿したいと思いました。この記事は非常に役に立ちました:http ://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3/

秘訣は、HTML5データ属性を追加することです。たとえば、Railsによって提供されるまたはコールバックをフォームにdata-completeバインドするか(より適切に)バインドします(上記のリンク先の記事の4.リモートJavaScriptコールバックを参照)。ajax:completeajax:success

記事から:

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
)
于 2013-07-02T13:54:22.730 に答える
2

これを今行うための有効な方法は次のようです:

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

これは、ruby1.9ハッシュ構文を次のように使用すると少し見栄えが良くなる可能性があります。

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

https://github.com/plataformatec/simple_form/wiki/HTML5-属性

于 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 に答える