2015-12-02 1 views
0

Я хочу, чтобы иметь возможность просматривать записи из модели (рельсы 4) и использовать флажок, чтобы выбрать, какие элементы будут отправляться по электронной почте. Я использую приложения скрепки, хотя это, вероятно, не имеет значения.как вы можете получить значения из checkbox_tag, чтобы выбрать записи в 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 с идентификаторами документов, которые я хочу, чтобы прикрепить к письму. У меня есть представить в

<%= submit_tag "Edit Checked" %> 

Я знаю, что у меня есть некоторые проблемы с синтаксисом тега формы и 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 

ответ

2

приложение/контроллеры/documents_controller.rb

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

приложение/просмотр/документы/email_preview_list_documents.html.erb

<ul> 
<% @to_email.each do |email| %> 
    <li><%= email %></li> 
<% end %> 
</ul> 
+0

Я получаю NoMethodError в Документах # email_preview_list_documents Показан C: /Users/cmendla/RubymineProjects/technical_library/app/views/documents/email_preview_list_documents.html.erb где строка # 9 поднятые: неопределенного метода 'каждого» для nil: NilClass Rails.root: C:/Пользователи/cmendla/RubymineProjects/technical_library Трассировка приложения | Рамочная трасса | Full Trace app/views/documents/email_preview_list_documents.html.erb: 9: в '_app_views_documents_email_preview_list_documents_html_erb___507883639_59979312 ' –

+0

увидите имя' to_email'. например, я полагаю, что ' => params [: document] [: to_email]' – kalelc

0

Похоже, вы должны определить @documents в своем методе email_preview_list_documents. Попробуйте сделать это:

def email_preview_list_documents 
    @documents = Document.all 
end 

Я надеюсь, что это поможет вам.

0

Я, наконец, получил эту работу благодаря ответам и некоторым другим исследованиям.

В документах/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 будет сравнивать идентификаторы документов с идентификаторами массива из флажков и показывать только те документы, которые были проверены.

Смежные вопросы