如何从checkbox_tag中获取值以选择rails 4中的记录

时间:2015-12-02 19:16:06

标签: ruby-on-rails

我希望能够从模型(轨道4)查看记录,并使用复选框选择将通过电子邮件发送的项目。我正在使用回形针附件,尽管这可能并不重要。

我在我的索引中添加了checkbox_tag

 <tbody>
    <% form_tag %>
    <% @documents.each do |document| %>
      <tr>
        <td><%= document.title %></td>
        <td><%= document.doc_file_file_name %> </td>

        <td><%= check_box_tag("to_email[]", 'document.id') %></td>

据我了解,这应该给我留下一个名为to_email的数组,其中包含我要附加到电子邮件的文件的ID。我提交了

<%= submit_tag "Edit Checked" %>

我知道我在form标签和submit_tag的语法方面存在一些问题。我试图让被检查的项目显示在名为预览的视图上。我有一条路线设置为

get 'email/preview' => 'documents#email_preview_list_documents', as: 'preview'

如果我通过复选框将值输入数组,我该如何使用它来过滤记录?

我添加了所选的更改,现在正在进行

 NoMethodError in Documents#email_preview_list_documents
Showing C:/Users/cmendla/RubymineProjects/technical_library/app/views/documents/email_preview_list_documents.html.erb where line #9 raised:

undefined method `each' for nil:NilClass
Rails.root: C:/Users/cmendla/RubymineProjects/technical_library

    NoMethodError in Documents#email_preview_list_documents

NoMethodError in Documents#email_preview_list_documents

3 个答案:

答案 0 :(得分:2)

应用/控制器/ documents_controller.rb

self.mapView.basePredicate = NSPredicate(format: "name BEGINSWITH 'A'")

应用/视图/文档/ email_preview_list_documents.html.erb

class DocumentsController < ApplicationController  
  def email_preview_list_documents
    # it includes checkbox name into params
    @to_email = params[:to_email]
  end
end

答案 1 :(得分:0)

您似乎必须在@documents方法中确定email_preview_list_documents。尝试这样做:

def email_preview_list_documents
  @documents = Document.all
end

我希望这对你有所帮助。

答案 2 :(得分:0)

由于回复和其他一些研究,我终于得到了这个工作。

在documents / index.html.erb中,我添加了

 <%= form_tag preview_path do %>
. . .
<td><%= check_box_tag "document_ids[]", document.id %></td>
. . . 
<%= submit_tag "Edit Checked" %>

在文件控制器中,我添加了

 def index_multiple
 @documents = Document.find(params[:document_ids])
在routes.rb中

,我添加了

 match 'email/preview', to:  'documents#index_multiple', via: [:get, :post ], as: 'preview'

这允许我查看索引,检查我想要的项目,然后将它们显示在新页面上。 Document.find将比较复选框中文档的ID与数组的ID,并仅显示已检查的文档。