4

私の見解では、次のコードがあります。

<%= form_for :folder_name, :remote => true, :method => "get", :url => {:action 
    => "show_workflow_list"} do |f| %>
  <%= f.select :foldernames, options_for_select(@folders, @folders.first), {}, {:onchange => ("this.form.submit()")}%><br /><br />
  <%= hidden_field_tag 'selected_domain', params[:domain_selected] %>

ドロップダウンの値を変更すると、フォームは次のように送信されます。

Processing by DeploymentGroupController#show_workflow_list as HTML
Parameters: {"utf8"=>"Γ£ô", "folder_name"=>{"foldernames"=>"DETAIL_ADJUSTMENT"

以下のようなものの代わりに送信ボタンを追加すると:onchange=>

<%= form_for :folder_name, :remote => true, :method => "get", :url => {:action => "show_workflow_list"} do |f| %>
  <%= f.select :foldernames, options_for_select(@folders, @folders.first)%><br /><br />
  <%= hidden_field_tag 'selected_domain', params[:domain_selected] %>
  <pre><%= f.submit "Submit"%></pre>

リクエストは次のように送信されます。

Processing by DeploymentGroupController#show_workflow_list as JS
Parameters: {"utf8"=>"Γ£ô", "folder_name"=>{"foldernames"=>"DETAIL_ADJUSTMENT"

show_workflow_listアクションに次のコードがあります。

def show_workflow_list
  //some code
  respond_to do |format|
    format.js
  end
end

次の内容のshow_workflow_list.js.erbファイルがあります。

$('#workflow_selection').html("<%=j render "show_workflow_list" %>");

問題は、に変更するとonchange=> submit、アクションがHTMLとして処理されることです。

 Processing by DeploymentGroupController#show_workflow_list as HTML

送信ボタンがある場合はJSとしてではありません。

 Processing by DeploymentGroupController#show_workflow_list as JS

そのため、406ステータスエラーが返され、show_workflow_listがレンダリングされません。


アップデート:

なぜonchange=>HTMLとして送信されているのか理解しました。その理由は、selectの形式が「select(object, method, choices, options = {}, html_options = {})」であるためです。私が言及している場所":onchange=>this.for.submit" is under html_options={}"は、それがHTMLとして提出されている理由です。_show_workflow_list.html.erb同じページのとの間の部分をレンダリングする必要があるため<div>、コントローラーのコードを次のように変更しました。

def show_workflow_list
  //code here
  respond_to do |format|
    format.html{?}
  end
end

上記のコードでは、のタグ間の部分をレンダリングするように{}、何かを入力する必要があります。format.html_show_workflow_listdivmake_deployment_group.html.erb

4

3 に答える 3

3

JSファイルでは、次のようにする必要があります。

$('#foldernames').change(function() {
  $('#folder_name').submit()
});

そして、あなたのコントローラーにはこれが必要です:

def show_workflow_list
  //code here
  render :format => :js
end

値を変更すると、フォームが送信され、コントローラーにajaxリクエストが送信されます。コントローラはjs形式をレンダリングし、を実行する必要がありますshow_workflow_list.js.erb。これを確認するには、firebugのようなjavascriptコンソールを使用できます。

于 2012-07-25T23:55:42.133 に答える
1

jQueryのsubmit呼び出しを誤って使用しているためです

この記事をチェックしてください...それは私のために働きました javascriptを介してRailsリモートフォームを送信します

于 2013-02-02T07:24:38.853 に答える
0

これを試して

<%= f.select :foldernames, options_for_select(@folders, @folders.first), {}, {:onchange => remote_function(:method => :get, :url => {:action => 'show_workflow_list'}, :with => 'Form.Element.serialize(this)')}%><br /><br />
于 2012-07-25T21:45:27.797 に答える