2016-04-22 2 views
0

Я настоящий начинающий рельс, пытающийся создать небольшое приложение. Поэтому я получил рельсы 4.2.5 и разработал для моей аутентификации пользователя. Я добавил в пользовательскую модель два дополнительных поля (имя пользователя, город). Все работает нормально.Обновление пользовательского поля пользователя с помощью частичной формы jQuery

У меня есть частичное в верхней части моего приложения, которое открывается с помощью jquery, нажав на кнопку на каждой странице. Это частичное должно включать поле ввода, в котором пользователь может редактировать свой город (через AJAX?). После отправки, город должен быть изменен и страница перезагружена.

И теперь я не уверен, как достичь этого и как идти. Мне нужен небольшой гид, который поможет мне сделать это! Поскольку по умолчанию разработчик не генерирует контроллеры и не использует обычные пути, я немного потерял свой опыт в рельсах.

спасибо, что заблаговременно! :)

+0

Можете ли вы показать код, который у вас есть для частичного до сих пор? Отображается ли это только при входе пользователя в систему? Также хорошо работает код - как вы обновляете имя пользователя, город? – Anand

ответ

0

Итак, большое спасибо Hieu Pham! Я понял, как заставить его работать с вашими шагами. Но я должен был изменить их немного, но теперь он работает :) Так вот это для всех остальных, кто хочет знать:

routes.rb

devise_scope :user do 
    patch "update/:id", to: "registrations#update_city", as: "update_city" 
end 

registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController 

    def update_city 
    @user = current_user 
    if @user.update_attributes(user_params) 
     respond_to do |format| 
     format.js {render inline: "location.reload();" } 
     end 
    else 
     flash.now[:error] = "Could not save client" 
    end 
    end 

    private 

    def user_params 
    params.require(:user).permit(:city) 
    end 

end 

моя форма частичной

<%= simple_form_for @user, url: update_city_path(@user), remote: true do |f| %> 
    <%= f.input :city, placeholder: t('.yourcity') %> 
    <%= f.button :submit, t('.submit') %> 
<% end %> 

Теперь он отлично работает :) Я знаю, мне нужно добавить ответы лучше на сохранение, но это было просто для отладки!

1

Есть 2 решения здесь, с или без настройки разработать контроллер будет работать хорошо:

Решение # 1: контроллер Настройки Разрабатывает

  1. Config маршрут:

    routes.rb

    devise_for :users, controllers: { registrations: 'registrations' } 
    
    devise_scope :user do 
    post "https://stackoverflow.com/users/:id/update_city" => "registrations#update_city" 
    end 
    
  2. Создать в соответствии контроллер, который унаследует от контроллера DEViSE:

    приложение/контроллеры/registrations_controller.rb

    class RegistrationsController < Devise::RegistrationsController 
        def update_city 
        # Do your stuff 
        # return json here, if return javascript, go to step #3 
        end 
    end 
    
  3. В случае возврата JavaScript, ваш взгляд будет:

Приложение/views/registration/update_city.js.erb

<!-- Your javascript here --> 

Решение # 2: Создать новый контроллер, не забота о изобрести

  1. Config маршрута:

devise_scope: пользователь может делать пост «/ пользователей /: id/update_city "=>" custom_registrations # update_city конец

  1. Создать согласно контроллеру

    приложение/контроллеры/custom_registrations_controller.гь

    class CustomRegistrationsController < ApplicationController 
        before_action :authenticate_user! 
    
        def update_city 
        # Do your stuff 
        # return json here, if return javascript, go to step #3 
        end 
    end 
    
  2. В случае возврата JavaScript, ваш взгляд будет:

    приложение/просмотров/custom_registrations/update_city.js.erb

    <!-- Your javascript here --> 
    

2 решение как и то же, но отличается от того, как настроить devise, решение № 2 не трогает разработчик стандартного контроллера, но будет 2 связанных с контроллером t o обновление пользовательских материалов. В зависимости от вашей системы, это только мои предложения! Приветствуем любые комментарии.

+0

Какой прекрасный ответ! Это именно то, что мне нужно было идти дальше. Сначала попробую ваше второе решение, и тогда я дам вам обратную связь! Еще раз спасибо! – FNGR

+0

Привет @ hieu-pham! Я попробовал ваше первое решение. Теперь я получаю следующее сообщение об ошибке с моей формой: 'неопределенного методом' user_path»для # <# <Класс: 0x007fcc97933af8>: 0x007fcc91d6bd60>' Моей форма частичных выглядит следующим образом: ''

<%= simple_form_for @user, remote: true do |f| %> <%= f.input :city, placeholder: 'Deine Stadt' %> <%= f.button :submit %> <% end %>

FNGR

+0

Эй, просто добавить сайт вариант для вашей формы, это будет выглядеть как 'simple_form_for @user, remote: true, url: user_update_city_path (@user)' –

Смежные вопросы