Rails добавляет id к единственному маршруту при рендеринге после ошибок - PullRequest
3 голосов
/ 24 мая 2011

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

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 Ответ

0 голосов
/ 14 ноября 2012

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

<%= simple_form_for @seller_profile, :url => seller_profile_path do |f| %>
  <%= f.input :name %>
  <%= f.input :description %>   
  <%= f.submit %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...