2014-02-19 3 views
0

У меня есть модель пользователя, которую можно редактировать на обычном пути редактирования рельсов.Редактирование записи, если не на «обычном» пути редактирования рельсов

Однако я хочу разрешить нескольким полям из пользовательской модели быть редактируемыми из корня.

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

Как это изменить, чтобы пользователь перенаправлялся обратно к индексу (с сообщением об ошибке), если он отправил запрос с индексной страницы (но сохраните его так, чтобы пользователь перенаправлялся обратно к пути редактирования, если это ? где они делали правку из

Кроме того, чувствует, как я хакерство это и не делать это в «наилучшей практики» способ - это есть лучший способ сделать это

код я скопированный с. путь редактирования на индексную страницу:

<%= simple_form_for(current_user, :url => registration_path(current_user), :html => { :method => :put, :class => 'form-vertical ' }) do |f| %> 
    <%= f.error_notification %> 
     <%= display_base_errors current_user %> 
     <%= f.input :dry_fly, inline_label: 'I use dry flies', as: :boolean, label: false %> 
     <%= f.input :wet_fly, inline_label: 'I use wet flies', as: :boolean, label: false %> 
     <%= f.input :lure, inline_label: 'I use lures', as: :boolean, label: false %> 
     <%= f.input :still_water, inline_label: 'I fish lakes', as: :boolean, label: false %> 
     <%= f.input :river, inline_label: 'I fish rivers', as: :boolean, label: false %> 
     <%= f.input :current_password, :hint => "we need your current password to confirm your changes", :required => true %> 
     <%= f.button :submit, 'Update', :class => 'btn-primary' %> 
    <% end %> 

R egistrationsController # обновление:

def update 
    self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key) 
    prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email) 

    if update_resource(resource, account_update_params) 
     yield resource if block_given? 
     if is_flashing_format? 
     flash_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ? 
      :update_needs_confirmation : :updated 
     set_flash_message :notice, flash_key 
     end 
     sign_in resource_name, resource, :bypass => true 
     respond_with resource, :location => after_update_path_for(resource) 
    else 
     clean_up_passwords resource 
     respond_with resource 
    end 
    end 

Похоже, ответ Kirti Thorat является правильный путь - но я не могу видеть из контроллера Придумайте, где он определяет, какой маршрут следует использовать, если проверка не пройдена?

+0

Что делает контроллер делать, когда есть ошибка проверки? –

+0

Я добавил метод регистрации # для моего сообщения – JRTurner1234

ответ

0

Да, это возможно, но для этого вам сначала нужно проверить HTTP-референт, который предоставит вам запрос, и, соответственно, вы сможете отобразить свое мнение в действии update. для например:

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

if URI(request.referer).path == edit_user_path 
    render :edit    ### Specify appropriate action 
else 
    render :index   ### Specify appropriate action 
end 
Смежные вопросы