#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 %>