Как получить доступ к сообщениям проверки в партиалах? - PullRequest
0 голосов
/ 29 октября 2010

Итак, каждый рельсовый проект, с которым я сталкивался, сталкивался с этой проблемой, и был бы очень признателен, если бы кто-то смог меня просветить:

При "нормальной" настройке, когда форма находится в представлении, непосредственно связанном с URL / контроллером, это довольно просто, при ошибке render => :action при отображении появляется сообщение проверки.

Теперь у меня есть форма в частичном сеансе на странице, URL / контроллер которой является show /: id, а не действие создания формы, проверка запускается, но я не могу отобразить сообщение проверки, потому что я не могу вызвать правильное действие рендеринга ... CLOSEST, я получил, это render => @object, но нет css / layout, я могу передать сообщение через редирект с помощью flash [], но это не так, как и в сообщениях об ошибках jquery / client ...

Так, как я могу "аккуратно" отображать сообщения проверки формы в частичном (под другим контроллером / действием, чем родительская страница)?

(заранее спасибо за помощь)

edit: не могу вставить реальную вещь сейчас, но я сделаю все возможное, чтобы объяснить

У меня есть главная страница, например article / show / 01, на этой странице находится содержание статьи (@article), а затем внизу страницы находится частичный _commentform с формой для публикации комментария. Эта форма связана с действием Создать другого контроллера (контроллера комментариев).

Теперь, если бы форма была на собственной странице / URL-адресе вместо частичной, скажем / комментируйте / создавайте, я бы просто сделал:

if @comment.save
redirect_to @comment
else 
render => :create
end

и проверка будет отображаться нормально.

В моем случае форма частично указана для URL article / show / 01, что должно быть эквивалентно приведенному выше коду, чтобы при сбое валидации сообщения об ошибках отображались на родительском URL, например, "render article / show". / 01 "? Я уверен, что это легко, но я не могу заставить его работать (я просто могу перенаправить при успехе, но не могу отобразить ошибки с рендером)

Ответы [ 2 ]

0 голосов
/ 29 октября 2010

Если вы хотите отобразить что-либо (включая сообщения об ошибках) в партиале, у вас есть два способа:

1 - Определить это в действии контроллера, где партиал называется 2 - передать сообщение в качестве параметра вчастичное

1 - пример

in your controller/action

if @comment.save
 redirect_to @comment
else
 @messages = "This is a message" 
 render => :create
end

in your partial

you can access the @message variable

2 - передача переменной в частичное

render :partial => “<partial name>”, :locals => { :param1 => “value”}

<partial name> – name of your partial (Ex /partials/footer)

:params1 – parameter name

“value” – value

надеюсь, это поможет

спасибо

Sameera

0 голосов
/ 29 октября 2010

Я не думаю, что лучший способ отображения ошибок валидации - это визуализация частичного.

ИМХО, лучший и чистый способ отображения сообщений об ошибках с использованием стилей / CSS, которые вы или ваш веб-дизайнер хотитеРеализация вашего собственного метода error_messages в FormBuilder.

Например, вот метод error_messages, который я реализовал для моего последнего проекта.

Вот пример, который выведет список ошибок в ul/ li с некоторыми пользовательскими стилями ... Просто настройте это и поместите ваш конструктор форм в app / helpers ...

class StandardBuilder < ActionView::Helpers::FormBuilder
  def error_messages
    return unless object.respond_to?(:errors) && object.errors.any?

    errors_list = ""
    errors_list << @template.content_tag(:span, "There are errors!", :class => "title-error")
    errors_list << object.errors.full_messages.map { |message| @template.content_tag(:li, message) }.join("\n")

    @template.content_tag(:ul, errors_list.html_safe, :class => "error-recap round-border")
  end
end

Тогда в моих формах:

= form_for @post, :builder => StandardBuilder do |f|
  = f.error_messages
  ...

Не нужнопоказать / сделать еще один фрагментИ это все :).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...