我的观点中有这个代码:
<%= 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
中的内容,以便在我{{1}的_show_workflow_list
标记之间呈现部分div
}}
答案 0 :(得分: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控制台。
答案 1 :(得分:1)
这是因为您正在使用jQuery提交调用错误
查看这篇文章......它对我有用 Rails remote form submit through javascript
答案 2 :(得分: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 />