Rails добавляет идентификатор к единственному маршруту при редактировании рендеринга после ошибок

#ruby-on-rails-3 #url #routes

#ruby-on-rails-3 #url #маршруты

Вопрос:

У меня есть следующий уникальный маршрут:

 scope '/seller' do
  resource :seller_profile, :path => "/profile", :only => [:show, :edit, :update]
end
  

и следующий контроллер:

 class SellerProfilesController < ApplicationController
  before_filter :validate_user_as_seller

  def show
     @seller_profile = current_user.seller_profile
  end

  def edit
     @seller_profile = current_user.seller_profile
  end

  def update
    @seller_profile = current_user.seller_profile

    if @seller_profile.update_attributes(params[:seller_profile])
       redirect_to(seller_profile_path, :notice => 'Profile was successfully updated.')
    else
       render :action => "edit"
     end
   end
end
  

Я использую единственный маршрут, учитывая, что пользователь должен пройти аутентификацию перед получением доступа к контроллеру, и поэтому я могу получить seller_profile от пользователя, вошедшего в систему.

Это работает как шарм, только с одной проблемой. Когда я редактирую seller_profile и возникает ошибка проверки, форма редактируется снова, и ошибки отображаются правильно. Проблема в том, что rails добавляет к URL идентификатор отредактированной записи. Например, когда я впервые редактирую запись, URL-адрес:

 http://0.0.0.0:3000/seller/profile/edit
  

но если форма отправлена с ошибками проверки, сама форма повторно отображается под

 http://0.0.0.0:3000/seller/profile.2
  

где 2 — идентификатор редактируемой записи.

Форма следующая:

 <%= simple_form_for @seller_profile do |f| %>
  <%= f.input :name %>
  <%= f.input :description %>   
  <%= f.submit %>
<% end %>
  

Все, как сказано, работает отлично, но я бы полностью замаскировал идентификатор в URL. Что мне делать?

Комментарии:

1. Я полагаю, это связано с URL, который вы используете для своей формы в режиме редактирования. Можете ли вы также предоставить эту часть кода? ( form_for … часть)

Ответ №1:

На самом деле я не слишком много работал с simple_form_for. Но похоже, что он всегда угадывает ваш URL, как если бы они не были отдельными ресурсами. Вы можете предоставить пользовательский:

 <%= simple_form_for @seller_profile, :url => seller_profile_path do |f| %>
  <%= f.input :name %>
  <%= f.input :description %>   
  <%= f.submit %>
<% end %>