Ошибки не будут работать с формой в представлении индекса - PullRequest
0 голосов
/ 25 ноября 2010

Я пытаюсь создать форму объекта в представлении «Индекс», все идет хорошо, но когда сохранение не удается (ошибка проверки), ошибки не будут отображаться на экране, как они должны.

Это мой контроллер ссылок

class LinksController < ApplicationController


respond_to :html

def index
    @link = Link.new
    @links = Link.all
end

def create
    @link = Link.new(params[:link])
    flash[:notice] = "Link was found successfully." if @link.save
    respond_with(@link)
end

def show
    respond_with(@link = Link.find(params[:id]))
end

def statistics

end
end

И это частичная форма, в которой должны отображаться ошибки

<h1>New Search</h1>
<%= form_for(@link) do |f| %>           

<% if @link.errors.any? %>
    <div id="error_explanation">
        <h2><%= pluralize(@link.errors.count, "error") %> prohibited this ticket from being saved:</h2>

        <ul>
            <% @link.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
            <% end %>
        </ul>
    </div>
<% end %>

<p><b><%= f.label(:original, "URL") %></b>
<%= f.text_field :original %></p>

<p><%= f.submit('Find Link') %></p>

<% end %>

Когда я создаю новый объект и оригинал действителен, все идет хорошо, но когда это не так, я получаю:

Шаблон отсутствует

Отсутствуют ссылки на шаблоны / новые с {: format => [: html],: locale => [: en,: en],: handlers => [: erb,: builder,: rjs,: rhtml,: rxml ]} в путях просмотра

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

respond_with(@link) do |format|
            format.html { render :action => 'index'}
end

Также мой index.html.erb, он загружает частичную форму, а недавний частичный ниже

<%= render 'form' %>

<%= render 'recent' %>

_recent.html.erb

<h1>Recent Finds</h1>

<table>
    <tr>
        <th>URL</th>
        <th>Link</th>
        <th>Service</th>
    </tr>

<% @links.each do |link| %>
    <tr>
        <td><%= link.original %></td>
        <td><%= link.link %></td>
        <td><%= link.site %></td>
    </tr>
<% end %>

</table>

Есть идеи о том, что я могу сделать здесь?

Ответы [ 3 ]

0 голосов
/ 25 ноября 2010

Ваш метод create отвечает вашим объектом, созданным из параметров, независимо от того, было ли сохранение успешным или нет.Вы, вероятно, хотите что-то вроде этого:

def create
  @link = Link.new(params[:link]
  if @link.save
    respond_with(@link, :notice => "Yay!")
  else
    redirect_to(links_path, :alert => "Nay!")
  end
end
0 голосов
/ 25 ноября 2010

Если выдается сообщение об ошибке типа Template is missing, которое означает, что при выполнении действия создания, если запись не сохранена, она пытается отобразить «новую» страницу, которая не существует.

У меня нет особого представления о response_with и о том, как мы можем переопределить его поведение при сбое действия, но вы можете написать свой код следующим образом:


def create
  @link = Link.new(params[:link])
  if @link.save  
    flash[:notice] = "Link was found successfully." 
    respond_with(@link)
  else
   @links = Link.all
   render :action => :index
  end
end

И для отображения сообщений об ошибках вы можете написать это условие:

<% unless @link.valid? %><br> put your content to display error messages here <% end %>

0 голосов
/ 25 ноября 2010
<% if f.error_messages.blank? %>
    content when there are error messages
<% end %>

Это то, что я сделал в 2.3.8

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