2014-11-20 3 views
0

Я пытаюсь отображать ошибки, когда форма отправлена ​​правильно. Таким образом, моя форма попадает в индекс, как от контроллера,Сообщение об ошибке рендеринга в rails

def index 
    @player_types = squad.player_types 
    end 

Тогда в индексном,

<%= form_tag({:action => :update}, :method => :put) do %> 
<%= render 'shared/error_messages' %> 
<table> 
     <% @player_types.order(:number).each do |p_type| %> 
      ...do something... 
<%end%> 
<%end%> 

В сообщении об ошибке У меня есть простая проверка ошибок (на данный момент), который терпит неудачу

<% if @player_types.errors.any? %> 

из undefined method 'errors'

В большинстве примеров, которые существуют в Интернете, ошибки метод задается при создании объекта с использованием new. Однако в моем случае объект изначально имеет отображаемое содержимое. Я делаю что-то неправильно здесь, должен ли я даже использовать @player_types, чтобы зафиксировать ошибку?

EDIT: Как было предложено в комментариях, я петельные в сообщении об ошибке

<% @player_types.each do |p_type| %> 
    <% if @p_type.errors.any? %> 
    <%end%> 
<%end%> 
+0

Какое полное сообщение об ошибке? –

+0

Я отчасти новичок в этом, еще не инициализировал его. Мой мотив состоял в том, чтобы страница индекса работала нормально, а затем беспокоилась о сообщениях. Это то, что я должен делать раньше? – Trancey

+0

Вы не пытаетесь обновить многие объекты Игрока? Использование одной формы для этого может быть неправильным способом сделать это. Какая у вас конечная цель? – rorofromfrance

ответ

1

Есть несколько вещей, здесь не так:

1) Вам нужен экземпляр класса ActiveRecord, чтобы иметь метод ошибок.

Из вашего контрольного кода выше я предполагаю, что у вас есть индексный метод с массивом экземпляров (отношение has_many) squad.player_types. Метод errors может быть вызван только для самих объектов (а не для отношения), потому что в общем случае у вас будут разные данные для каждого объекта, которые могут иметь разные ошибки.

2) Метод ошибок пустой массив, если вы не вызываете #save, #update или #valid? на вашем экземпляре до

Для того чтобы метод ошибок действительно содержал какие-либо ошибки, вы должны вызвать метод, который раньше выполнял ваши проверки. Поскольку вы использовали «put» в качестве метода формы, я предполагаю, что вы хотите что-то обновить, так что это обычно делается методом обновления в RESTful approach. Если вы не заботитесь о том, что вы могли бы сделать это и в своем методе индекса. Его вид непонятно для меня, что вы пытаетесь понять, поэтому я не могу дать вам пример кода для этого

3) Вы можете только подтвердить свои данные, прежде чем отправлять их с помощью проверки на стороне клиента javascript.

Как я уже заметил в 2), вам необходимо в какой-то момент подтвердить свои данные. Это включает в себя получение некоторых данных из вашей формы в экземпляр модели, а затем вызов метода, который выполняет проверки модели. Единственная опция проверки формы перед ее отправкой - использовать проверки на стороне клиента HTML5 или javascript. Но будьте осторожны, проверка на стороне клиента - это всего лишь инструмент, помогающий пользователю, и этого недостаточно, чтобы обеспечить правильность ваших данных.


Finnaly Я хотел бы рекомендовать использование формы библиотек как simple_form или formtastic, которые уже способны отображать сообщения об ошибках в хороший способ, и есть много примеров использования вы можете найти в Интернете, для них обоих.

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