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。我需要在同一页面上渲染 a_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 提交调用

检查这篇文章...它对我 有用 Rails 远程表单通过 javascript 提交

于 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 回答