Ruby on rails Ruby on Rails,提交带有3个复选框的标签

Ruby on rails Ruby on Rails,提交带有3个复选框的标签,ruby-on-rails,checkbox,submit-button,Ruby On Rails,Checkbox,Submit Button,我需要的是Ruby On Rails以外的东西。 我有一个选择要删除或分析的特定文件的代码: <% if @files%> <%= form_tag what_to_do_files_path, method: :get do %> <%= submit_tag "Delete selected", :name => 'delete' %> <%= submit_tag "Analyse", :name => 'analyse' %&

我需要的是Ruby On Rails以外的东西。 我有一个选择要删除或分析的特定文件的代码:

<% if @files%>    
<%= form_tag what_to_do_files_path, method: :get do %>
<%= submit_tag "Delete selected", :name => 'delete' %>
<%= submit_tag "Analyse", :name => 'analyse' %>
  <% @files.each do |file| %>
    <% if (arraydb.file=="no") %>
        <p><td> <%= check_box_tag "files[]", file.id %></td><%= file.name %></p>       

    <% else %>      

    <div class="my_profile_info">     
    <p><td> <%= check_box_tag "files[]", file.id %></td> <%= file.name %></p>        

    <td class="Info">
    <a href="<%=file.info%>" target ="_blank" class= "btn btn-mini btn-info">Info</a>  
    </td>  

     </div>

    <% end %>
  <%end%>
<%end%> 
<%else%>
<%end%>
控制器:

def what_to_do
  method=params[:commit]
    if method == 'Delete selected'
     do smt

   elsif  method == 'Analyze'
     do another thing
   end
end
elsif method == "Analyze"
 if params[:pictures]
  do picture stuff
 if params[:normalization]
  do normalization stuff
params[:files].each do |file_id|
  params[:file_options][:file_id].each do |option|
    # do something according to "pics" or "info" etc..
  end
end
我需要的是“分析”按钮的选项。像图片、信息、标准化、带有复选框的散点图。 所以,我选择了图片和标准化,并点击分析,所以只有这两个选项将继续进行。我不太确定如何将复选框包装到submit_标记

编辑

范例 选择选项复选框

规范化 照片 散点图 信息 选择文件复选框:

文件1 文件2 文件3
如果打开Firebug/Chrome inspector并查看在中进行任何选择后会发生什么,您可以看到他们发出GET请求并将选中复选框的值传递给服务器。这正是你能实现的

将所选复选框的值传递给服务器,然后根据该值处理服务器上的内容。传递给控制器的参数应显示所传递的值


小建议在继续时,您可以将提供文件详细信息的代码移动到模型中。这样,尽管您没有与数据库关联,但在此模型类中不继承ActiveRecord,但您仍然遵循MVC原则。

如果打开Firebug/Chrome inspector,查看在中进行任何选择后会发生什么,您可以看到他们发出GET请求,并将选中复选框的值传递给服务器。这正是你能实现的

将所选复选框的值传递给服务器,然后根据该值处理服务器上的内容。传递给控制器的参数应显示所传递的值


小建议在继续时,您可以将提供文件详细信息的代码移动到模型中。通过这种方式,尽管您与数据库无关,但在这个模型类中不要继承ActiveRecord,但您仍然坚持MVC原则。

我不能100%确定我是否理解您的意图,但这是我的理解:

您有一堆文件可以通过复选框选择,您还需要选项复选框将其他选项传递给分析操作

只需在表单标签中添加:

<%= check_box_tag "pictures", true %>
<%= check_box_tag "normalization", true %>
等等等等等等
params[:nameofcheckboxtag]将被设置为value second选项,在我的示例中,如果选中复选框,则为true,否则它将不存在。无论哪种方式,本例只处理选中的选项。

我不能100%确定我是否理解您的意图,但这是我的理解:

您有一堆文件可以通过复选框选择,您还需要选项复选框将其他选项传递给分析操作

只需在表单标签中添加:

<%= check_box_tag "pictures", true %>
<%= check_box_tag "normalization", true %>
等等等等等等
params[:nameofcheckboxtag]将被设置为value second选项,在我的示例中,如果选中复选框,则为true,否则它将不存在。无论哪种方式,本例只处理选中的选项。

我理解您的问题如下:

你有

文件1


图片我知道你的问题是这样的:

你有

文件1


图片对于您的案例,我认为您必须选择一组提交按钮文件/选项。你应该这样做:

控制器:

def what_to_do
  method=params[:commit]
    if method == 'Delete selected'
     do smt

   elsif  method == 'Analyze'
     do another thing
   end
end
elsif method == "Analyze"
 if params[:pictures]
  do picture stuff
 if params[:normalization]
  do normalization stuff
params[:files].each do |file_id|
  params[:file_options][:file_id].each do |option|
    # do something according to "pics" or "info" etc..
  end
end
视图:


希望有帮助!:

对于您的情况,我认为您必须选择一组提交按钮文件/选项。你应该这样做:

控制器:

def what_to_do
  method=params[:commit]
    if method == 'Delete selected'
     do smt

   elsif  method == 'Analyze'
     do another thing
   end
end
elsif method == "Analyze"
 if params[:pictures]
  do picture stuff
 if params[:normalization]
  do normalization stuff
params[:files].each do |file_id|
  params[:file_options][:file_id].each do |option|
    # do something according to "pics" or "info" etc..
  end
end
视图:


希望有帮助!:

我以前做过类似的事情。我们所做的基本上是使用javascript来更改隐藏标记的值

基本上,您为提交按钮设置了ID,并将其放入onClick事件中。我们通常使用JQuery,我想您也是,因为rails在大多数情况下都是打包的。但基本上在您的文档中。准备好了当他们单击“删除”按钮时,我将隐藏标记的值设置为“删除”,当他们单击“分析”按钮时,我将隐藏标记的值设置为“分析”。然后,在控制器中,当它出现时,只需检查隐藏标记名称的hte参数值。解释比编码容易。。。但事实证明,我现在正在编辑该文件,以便您可以查看:

    <script>
      jQuery(document).ready(function()
      {
        $('#unassign_button').click(function()
        {
          $('#action').val("unassign");
          $('#action_form').submit();
        });
        $('#add_button').click(function()
        {
          $('#action').val("add");
          $('#action_form').submit();
        });
      });
    </script>

这意味着您可以查看commit参数以查看他们单击了哪个按钮…

我以前必须执行类似的操作。我们所做的基本上是使用javascript来更改隐藏标记的值

基本上,您为提交按钮设置了ID,并将其放入onClick事件中。我们通常使用JQuery,我想您也是,因为rails在大多数情况下都是打包的。但基本上在您的文档中。准备好了当他们单击“删除”按钮时,我将隐藏标记的值设置为“删除”,当他们单击“分析”按钮时,我将隐藏标记的值设置为“分析”。然后在你的 控制器进入时,只需检查隐藏标记名称的hte参数值。解释比编码容易。。。但事实证明,我现在正在编辑该文件,以便您可以查看:

    <script>
      jQuery(document).ready(function()
      {
        $('#unassign_button').click(function()
        {
          $('#action').val("unassign");
          $('#action_form').submit();
        });
        $('#add_button').click(function()
        {
          $('#action').val("add");
          $('#action_form').submit();
        });
      });
    </script>

这意味着您可以查看commit参数以查看他们单击了哪个按钮…

问题是我不知道如何实现它,因此我不知道应该传递什么以引用submit_标记而不是file.id。问题是我不知道如何实现它,因此,我不知道应该传递给什么,以便引用submit_标记,而不是图片信息规范化的file.idno.checkbox和File1 File2 File3的checkbox。然后将只有2个复选框。在您的示例中,每个文件都有自己的复选框。因此,如果您有4个文件,那么所有文件都有一个复选框,每个文件都有一个额外的复选框,所以有5个复选框。我不需要这个。我需要一个复选框用于图片、信息、规范化、Scatterpoltsno.checkbox用于图片信息规范化和checkbox用于File1 File2 File3。然后将只有2个复选框。在您的示例中,每个文件都有自己的复选框。因此,如果您有4个文件,那么所有文件都有一个复选框,每个文件都有一个额外的复选框,所以有5个复选框。我不需要这个。我需要一个图片、信息、标准化的复选框,ScatterpoltsAlso现在我读得更深一点,如果你想系上按钮复选框按钮,你将使用上面相同的过程,但与你的复选框按钮,而不是隐藏标记。现在我读得更深一点,如果你想系上按钮复选框按钮,你将使用上面相同的过程,但与你的复选框按钮,而不是而不是隐藏的标签。我认为你的问题是,你在一个表单中有两个提交按钮,你想做不同的动作。如果可以的话,你应该更改标题。请看我的答案。我想你这里的问题是你在一个表单中有两个提交按钮,你想做不同的操作。如果可以的话,你应该更改标题。请看我的答案。