2009-09-12 12 views
0

У меня есть две модели, интерфейс и пользователь с соответствующими контроллерами и представлениями.Сообщения об ошибках проверки

От form_for в представлении frontend Я вызываю метод create в пользовательском контроллере, и я сохраняю нового пользователя в базе данных. Все работает.

Проблема возникает при проверке. Если что-то не так с валидаторами модели, мне нужны сообщения об ошибках, которые будут отображаться во внешнем виде ... так что мне нужно, если есть ошибки, когда I redirect_to интерфейс (поскольку рендер кажется невозможным для другого контроллера) можно отобразить ошибки здесь.

Я не нашел решения для этого.

Спасибо!

ответ

0

Если вы используете redirect_to, информация о проверке на этом конкретном объекте будет потеряна. Вы можете попробовать играть дешевые снимки с сохранением объекта во флэш-памяти или сеансе, извлекая его в контроллере frontend (создавая переменную экземпляра) и снова проверить его, чтобы помощник error_messages с чем-то работал.

OTOH, этот подход кажется ошибочным. Почему бы не создать форму для нового пользователя в пользовательском контроллере?

+0

Да, это кажется слишком громоздким;). Я не создаю форму в пользовательском контроллере, потому что в одном из моих интерфейсов мне нужна небольшая форма для регистрации пользователя. Если я ошибаюсь, я слушаю! – 2009-09-12 00:26:22

+0

Поместите код HTML/ruby ​​для этой формы в частичное - вы можете в любое время отобразить частичные объекты из представления, не принадлежащего текущему контроллеру, просто вызывая render => "viewname/partial". – cite

+0

Таким образом, однако, только частичный, внешний вид не отображается! – 2009-09-12 01:01:19

1

Если возможно, вы ошибетесь. cite имеет правильную идею, делая частичную рендеринг.

Предположим, что вы вызываете свой интерфейс из корня приложения, со страницей регистрации, которую все там проложили. В методе контроллера, который имеет это представление, создайте переменную экземпляра вашего пользователя, которая затем будет использоваться в форме. Например ...

def some_method_for_the_root 
    @user = User.new 
end 

Затем на ваш взгляд

all your code for the view 
render :partial => '/users/new' 

В том, что частичное, иметь свой form_for объект @user. Voila, у вас есть пользовательский объект, который можно использовать в основном приложении, а затем, если проверка не удалась, было бы лучше либо обновить через ajax, либо направить пользователя на страницу, чтобы явно показать им ошибки.

Это все из моего опыта, но обычно это метод, который я видел чаще всего.

+0

Да, я решил с частицами .. Теперь мне нужно найти способ справиться с ошибками проверки через ajax .. в чистом «рельсном образе жизни» :). Благодаря!! – 2009-09-13 14:29:40

+0

Хорошо, я уже дважды пробовал добавить комментарий с комментариями, и он меня ненавидит. Итак, см. Мой другой ответ ниже. – Eric

0

Совершенно просто, само по себе. С помощью метода, который вызывает ваши вызовы form_for, предположим, что он называется def create (в вашем пользовательском контроллере).

def create @user = User.new(params[:user]) 
@user.save 
if [email protected]? 
    @failed = true 
end 
respond_to do |format| 
    format.js {} # Will render the create.js.rjs file 
end 
end 

##### create.js.rjs ##### 

if @failed 
display the errors 
else 
do whatever you wish here 
end 
Смежные вопросы