2016-05-31 2 views
1

маршруты правильные, не уверены, что еще отключено? на страницу «Обновление» (, когда он перенаправляет обновить) Я получаю ошибкуПараметр отсутствует или значение пуст: пользователь (devise rails gem)

пары отсутствуют или значение пусто: Пользователь

Это моя вторая пользовательский вид страница для завещанию другой работает с похожим кодом.

routes-

devise_for :users, controllers: {registrations: 'users/registrations'} as :user do end root 'home#home' 

get 'users/discovery_settings' => 'users#discovery_settings' patch 'users/discovery_settings/update' => 'users#update_discovery' 

Мой пользователь контроллер-

 def update_discovery 
     @user = User.find(current_user.id) 
     if @user.update(user_params2) 
      # Sign in the user by passing validation in case their password changed 
      sign_in @user, :bypass => true 
      redirect_to root_path 
     else 
      render "edit" 
     end 
    end 



    def user_params2 
    # NOTE: Using `strong_parameters` gem 
    params.require(:user).permit(:discovery, :male, :female, :min_age, :max_age) 

end 

Тогда мои взгляды form_for вызывает метод

<%= form_for(@user, :url => { :action => "update_discovery" }, html: {class: "form floating-label"}) do |f| %> 
+0

где вы создаете @user? – Thorin

+0

@Thorin предположить, что есть символы «at» для пользователя (переполнение ограничивает их использование в комментариях) строка 2 user = User.find (current_user.id) – whataboutme1

+0

Нужно видеть, что вы формируете параметры и код формы, можете ли вы обновить ? –

ответ

1

фигурной это на моей и отправил блог об этом , вот мой ответ:

Из-за всех проблем, которые у меня были с настройкой, этот вариант, вероятно, занял самое длинное для меня. Распространенная ошибка, вы получите от делать это неправильно, является:

пары отсутствуют или значение пусто: Пользователь

первый шаг заключается в создании контроллера, который наследуется контроллер DEViSE (по существу перекрывая его). Это должно проходить внутри контроллеров/пользователей и называться registration_controller.rb.

Вставьте следующий код для вторичного клиента редактирования view-

class Users::RegistrationsController < Devise::RegistrationsController 
before_filter :configure_permitted_parameters 

def NAMEOFVIEW 
@user = current_user 
if @user 
render :NAMEOFVIEW 
else 
render file: 'public/404', status: 404, formats: [:html] 
end 
end 

также вам необходимо дезинфицировать любые пользовательские параметры, которые вы делаете в вашей базе данных

def configure_permitted_parameters 
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:username, :email, :password, :name, :user_age, :user_gender) } 
devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password, :name, :user_age, :user_gender, :user_bio) } 

end 

и, наконец, разрешить обновления без пароля (по умолчанию разрабатывает силы)

protected 

def update_resource(resource, params) 
resource.update_without_password(params) 
end 

Под маршрутами:

Rails.application.routes.draw do 
devise_for :users, controllers: {registrations: 'users/registrations'} 
as :user do 

match 'users/NAMEOFVIEWHERE' => 'users/registrations#NAMEOFVIEWHERE', :via => [:get], :as => 'NAMEOFVIEWHERE' 

, наконец, любые изменения в вашей точке зрения может быть сделано с помощью form_for или form_tag, form_for примера ниже:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, class: " html classes here" }) do |f| %> 

<div class="field"> 
<%= f.label :Bio %><br /> 
<%= f.text_area :user_bio, autocomplete: "off", class: "optional html class here", rows: 3, cols: 20, name: "description", placeholder: "About" %> 
</div> 

<div class="optional button class here"> 
<button type="submit">Save</button> 
</div> 
<% end %> 

Теперь перезапустите сервер рельсов и скрестите пальцы!

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