Эй, ребята, я обычно не пользовался эшафотами, хотя довольно долго возился с Rails.Я бы в большинстве случаев делал все вручную.
Теперь я пытаюсь создать спокойную реализацию формы.У меня есть form_for, например:
<% form_for @alliance, :url => create_alliance_path do |f| %>
<% if @alliance.errors.any? %>
<div id="errorExplanation">
<h2><%= pluralize(@alliance.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @alliance.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.label :name %>
<%= f.text_field :name %><br>
<%= f.label :description %>
<%= f.text_area :description %><br>
<%= f.label "Image URL" %>
<%= f.text_field :image_url %><br>
<%= f.submit "#{t 'alliance.create_button' }" %>
<% end %>
Маршруты:
scope :path => '/alliances', :controller => :alliances do
get 'show/(:id)' => :show, :as => 'alliance'
get 'new' => :new, :as => 'new_alliance'
post 'create' => :create, :as => 'create_alliance'
end
Теперь эта форма генерируется новым действием:
def new
@alliance = Alliance.new
end
Иотправка выглядит так:
def create
@alliance = Alliance.new(params[:alliance])
if @alliance.save
flash[:error] = I18n.translate 'error.alliance_created'
redirect_to alliance_path and return
else
redirect_to new_alliance_path and return
end
end
Теперь, если есть ошибка, я не получаю ее обратно при перенаправлении на new_alliance_path.На первый взгляд это кажется нормальным, поскольку new воссоздает переменную экземпляра @alliance.Однако в некотором коде скаффолдинга кажется, что это делается аналогичным образом.
Вы видите, что я делаю неправильно?