Rails: две отдельные формы создания .. как их разделить? - PullRequest
0 голосов
/ 23 декабря 2011

В Rails 3.0 у меня есть стандартная «новая» форма, которая создает новую запись, в данном случае пациента.Он работает нормально, и проверки / отображение ошибок также работают нормально.

Теперь клиенту нужна форма на испанском языке.

Итак, я сделал это:

  1. Созданоновый HTML-документ под названием "magazanish" (вырезать / вставить код из "пациентов / нового")
  2. Создал новый частичный элемент с именем "_form_newspanish" и ссылался на него, где партиал "формы" находится в "magazanish" (вырезать/ вставить код из представления «Patient / _form»)
    1. Создал действие контроллера в «пациентах», называемое «стандартов» и вырезать / вставить точный код из «нового» действия.
    2. Я оставилдействие «создать» нетронутым.
  3. В маршруты добавлено совпадение «пациентов / газетный».
  4. Перевод английских частей на испанский в представлениях / blogsanish и views / _form_newspanish.Просто материал, который пользователи читают на странице, конечно ... не код рельсов.

И, это работает, для идеальных представлений.

Для представлений, которые не проходят проверку (например, если ввести 3 цифры в качестве номера телефона), страница возвращается к виду «пациенты / новые» и отображает ошибки над формой ... на английском языке, конечно, потому что пациенты / новые на английском языке.

Конечно, я хочу, чтобы оно вернулось к «просмотрам / газетам», а также показало пользовательские ошибки в ошибках валидации (на испанском).

Любые мысли о том, как я могу загрузить представление пациентов / газет, когдапроверка ошибки произошла?

Вот мой код для "_form_newspanish"

<%= form_for(@patient) do |f| %>

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

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


  <p><label for="mobile">Número de teléfono celular o  móvil*</label>: <%= f.text_field :mobile %></p>
  <br />
    <%= f.submit "Inscribirme" %>
  </div>
<% end %>

И контроллер ... пациенты / газеты

  def newspanish
    @patient = Patient.new

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

1 Ответ

1 голос
/ 23 декабря 2011
<%= form_for(@patient) do |f| %>

создает форму, URL-адрес которой отправляется в "/ Patient", что соответствует Patient_Controller, создать действие.

Это действие создания, вероятно, имеет строку, которая говорит (в моем псевдокоде)

if @patient.save
 redirect to somewhere
else
 render :new
end

В этой строке "render: new" отображается представление "пациенты / новый".

Итак, вам нужно выяснить, нужно ли 1) обнаружить в Patient_Controller # создать какскажите, является ли он испанским, и отобразите "magazanish"

ИЛИ

2) измените <%= form_for(@patient) do |f| %>, чтобы передать новый URL, который обрабатывает только испанскую версию, и создайте новый контроллер или действие, котороепросто обрабатывает испанскую форму (и выводит «ечанище », если @patient не сохраняет

Для # 2, вы можете вручную изменить место отправки формы с помощью

<%= form_for(@patient), :url => spanish_patients_path do |f| %>

и вваши маршруты создают

post "patients/spanish" => "patients#create_in_spanish"

и добавляют def create_in_spanish к контроллеру ваших пациентов

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