Как передать сообщения об ошибках проверки методу в другом контроллере?

Я просто запускаю приложение rails 3, которое имеет родительскую модель и дочернюю модель (parent has_many: children) .

Я пытаюсь настроить так, чтобы после создания нового родителя пользователь переходил к действию показа этого родителя (/ parent / id). В этом представлении я включил частичные элементы для отображения всех дочерних элементов и форму для создания нового дочернего элемента. После создания нового дочернего элемента пользователь перенаправляется к действию show для родителя, где появится новый дочерний элемент. Все это работает так, как задумано.

Однако, если я попытаюсь проверить поля в новой дочерней форме, все возникающие сообщения об ошибках не появятся в форме (необходимые строки в представлении есть и правильные - вырезаны и вставлены из сгенерированный код скаффолда). Есть ли способ успешно передать эти сообщения об ошибках для дочернего элемента родительскому действию show?

Вот фрагменты соответствующего кода;

С моего родительского контроллера:

def show
  @parent = Parent.find(params[:id])
  @child = @parent.children.new

  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml => @admission }
  end
end

С моего дочернего контроллера: Изначально я использовал fgetcsv () для чтения CSV-файла, но по сравнению с file_get_contents () у меня была серьезная задержка, поэтому я переключился на file_get_contents (). Цикл будет выполняться за считанные секунды, пока я не попытаюсь добавить функцию (я также добавил выражение внутри цикла без функции, чтобы посмотреть, помогает ли это) для создания массива с данными CSV из каждой строки, это это то, что вызывает серьезные задержки во времени анализа! (разница составляет около 30 секунд на основе этого 200-мегабайтного файла, но я думаю, в зависимости от размера файла csv)

Вот код, чтобы вы могли видеть, что я делаю:

$filename = "file.csv";
$content = file_get_contents($filename);    
$rows = explode("\n", $content);    
foreach ($rows as $data) {    
    $data = preg_replace("/^\"(.*)\"$/","$1",preg_split("/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/", trim($data))); //THIS IS THE CULPRIT CAUSING SLOW LOADING?!?
}

Выполнение вышеуказанного цикла будет выполняться почти мгновенно без строки:

$data = preg_replace("/^\"(.*)\"$/","$1",preg_split("/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/", trim($data)));

Я также попытался создать функцию, как показано ниже (вне цикла):

function csv_string_to_array($str) {
$expr="/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/";
$results=preg_split($expr,trim($str));
return preg_replace("/^\"(.*)\"$/","$1",$results);
}

и вызвать функцию вместо одного лайнера:

$data = csv_string_to_array($data);

И снова безуспешно: {printf ("привет, доброе утро \ п"); возврат 0; } gcc -Wall -g temp.c / opt / langtools / bin / gdb a.out HP gdb 3.3 для PA-RISC 1.1 или 2.0 (...

вот мой пример программы:

#include<stdio.h>

int main()
{

printf("hello good morning \n");
return 0;
}


gcc -Wall -g temp.c


/opt/langtools/bin/gdb a.out
HP gdb 3.3 for PA-RISC 1.1 or 2.0 (narrow), HP-UX 11.00.
Copyright 1986 - 2001 Free Software Foundation, Inc.
Hewlett-Packard Wildebeest 3.3 (based on GDB) is covered by the
GNU General Public License. Type "show copying" to see the conditions to
change it and/or distribute copies. Type "show warranty" for warranty/support.
..
(gdb) b 6
Breakpoint 1 at 0x2b14: file temp.c, line 6.
(gdb) run
Starting program: /oo_dgfqausr/test/dfqwrk4/temp/a.out

Breakpoint 1, main () at temp.c:6
6       printf("hello good morning \n");
(gdb) step
hello good morning
7       return 0;
(gdb)

, как только я пытаюсь войти в функцию printf. Она завершается и возвращается в main. Означает ли это, что в библиотеке shred, в которой определена функция printf, отсутствуют символы отладки? Или я делаю что-то не так?

6
задан CharlesB 1 April 2011 в 11:51
поделиться