Различное формастическое поведение на двух, казалось бы, одинаковых серверах - PullRequest
0 голосов
/ 25 января 2012

У меня приложение запущено на производственных и промежуточных серверах.

На обоих работает одинаковая версия кода, серверы идентичны с точки зрения версий rails (3.1.3), гемов, схемы базы данных ... Я затрудняюсь найти какую-либо разницу.

Однако у меня есть форма, отображаемая с помощью formtastic (2.0.0.rc5), которая не отображается на 2 серверах. В производстве Formtastic, похоже, не правильно, учитывая, что представление находится в модуле администратора.

Часть, о которой идет речь, находится на app/views/admin/composers/_form.html.erb, а соответствующая ее часть:

<%= semantic_form_for @composer, :url => @composer.new_record? ? admin_composers_path : admin_composer_path(@composer) do |form| %>
    <%= form.inputs do %>
        <%= form.input :name %>

... и т.д ...

На моем промежуточном сервере форма отображается так, как ожидается (обратите внимание на id и name поля input):

<form accept-charset="UTF-8" action="/admin/composers" class="formtastic admin_composer" id="new_admin_composer" method="post" novalidate="novalidate">
  <div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="authenticity_token" type="hidden" value="rotbxUCJeZJuAY6eMRKaQKYdiPN0tlfQSKIeCj6VBUE=" />
  </div>
  <fieldset class="inputs">
    <ol>
      <li class="string input required stringish" id="admin_composer_name_input">
        <label class=" label" for="admin_composer_name">Name<abbr title="required">*</abbr></label>
        <input id="admin_composer_name" maxlength="255" name="admin_composer[name]" type="text" />

... и т.д ...

Однако на рабочем сервере

(обратите внимание на неправильные значения id и name):

<form accept-charset="UTF-8" action="/admin/composers" class="formtastic composer" id="new_composer" method="post" novalidate="novalidate">
  <div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="authenticity_token" type="hidden" value="qt++LTRdS+V28dvTRHA7h0vGhSKSoINP8cTjLRCk088=" />
  </div>
  <fieldset class="inputs"><ol>
    <li class="string input required stringish" id="composer_name_input">
      <label class=" label" for="composer_name">Name<abbr title="required">*</abbr></label>
      <input id="composer_name" maxlength="255" name="composer[name]" type="text" />

... и т.д ...

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

Мысли

1 Ответ

0 голосов
/ 26 января 2012

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

Мойновый метод в контроллере controllers/admin/composers_controller.rb изначально выглядел так:

def new
  @composer = Composer.new
end

(по сути) Но поскольку я собирался поместить все в административный модуль, на самом деле нужно было:

def new
  @composer = Admin::Composer.new
end

(я использую простой прием class Admin::Composer < Composer вместо того, чтобы пытаться заставить контроллер с пространством имен ссылаться на модель без пространства имен.)

...