Wicked Gem с коконом и разработкой пользовательской модели
Итак, у меня есть User
модель, созданная с devise
и я использую Wicked
gem, чтобы дать мне возможность мультиформной формы брать больше данных от пользователя и сохранять их в пользовательской модели.
Все работает нормально, но знаю, что я пытаюсь добавить еще одну модель, где у пользователя много степеней. Я использую камень кокона, чтобы позволить мне добавить дополнительные degrees
, Я могу зайти на страницу с несколькими формами, ввести информацию о степени и даже добавить еще много градусов для пользователя, но когда я отправляю форму, я получаю ошибку;
param is missing or the value is empty: user
Все остальное фактически сохраняется, я могу просматривать пользователя и остальные поля, введенные, но не градусов.
модель пользователя:
has_many :degrees
accepts_nested_attributes_for :degrees, reject_if: :all_blank, allow_destroy: true
Степенная модель:
belongs_to :user
user_steps_controller (это злой контроллер драгоценных камней):
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :personal, :avatar_and_about_yourself, :social, :education
def show
@user = current_user
render_wizard
end
def update
@user = current_user
@user.update_attributes(user_params)
render_wizard @user
end
private
def user_params
params.require(:user).permit(:name, :middlename, :lastname, :avatar, :aboutMe, :twitterlink, :githublink, :stackrulink, :mediumlink, :dribblerlink, degrees_attributes: [:id, :degreeName, :university, :level, :done, :_destroy])
end
end
Контроллер регистрации (для устройства):
class Users::RegistrationsController < Devise::RegistrationsController
# before_filter :configure_sign_up_params, only: [:create]
# before_filter :configure_account_update_params, only: [:update]
# GET /resource/sign_up
def new
super
end
# POST /resource
def create
super
end
# PUT /resource
def update
super
end
protected
# The path used after sign up.
def after_sign_up_path_for(resource)
user_steps_path
end
# The path used after sign up for inactive accounts.
def after_inactive_sign_up_path_for(resource)
user_steps_path
end
def sign_up_params
params.require(:user).permit(:email, :password, :password_confirmation, :name, :middlename, :lastname, :avatar, :aboutMe, :twitterlink, :githublink, :stackrulink, :mediumlink, :dribblerlink, degrees_attributes: [:id, :degreeName, :university, :level, :done, :_destroy])
end
end
Я получаю сообщение об ошибке в user_steps_controller:
ActionController::ParameterMissing in UserStepsController#update
param is missing or the value is empty: user
и что ошибка находится в этой строке:
def user_params
params.require(:user).permit(:name, :middlename, :lastname, :avatar, :aboutMe, :twitterlink, :githublink, :stackrulink, :mediumlink, :dribblerlink, degrees_attributes: [:id, :degreeName, :university, :level, :done, :_destroy])
end
Также, как бы я пошел и просмотреть введенные поля, например, если я хотел посмотреть имя пользователя, это:
<%= @user.name %>
но как бы я показал каждую степень? это просто петля?
<% @users.degree.each do |degree| %>
Терминал журнала:
Started PATCH "/user_steps/education" for ::1 at 2016-02-09 11:23:29 +0000
Processing by UserStepsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"EXN7ts6xPVK8vkC7q6UcNleJJWLUtKmOw41T0qsDqXCrPJ0vIHrB/6xIfpp/o+cXKR47F+6LxUY5LjXlCobKZQ==", "commit"=>"Update User", "id"=>"education"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 16]]
Completed 400 Bad Request in 2ms (ActiveRecord: 0.2ms)
ActionController::ParameterMissing (param is missing or the value is empty: user):
app/controllers/user_steps_controller.rb:20:in `user_params'
app/controllers/user_steps_controller.rb:13:in `update'
1 ответ
Это слишком долго комментировать, я полностью ожидаю, чтобы обновить его.
Проблема в том, что ваша форма не включает user
Титулы:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"EXN7ts6xPVK8vkC7q6UcNleJJWLUtKmOw41T0qsDqXCrPJ0vIHrB/6xIfpp/o+cXKR47F+6LxUY5LjXlCobKZQ==", "commit"=>"Update User", "id"=>"education"}
Это может быть Wicked
, но судя по форме вашего поддельного использования RegistrationsController
Я думаю, это может быть связано с форматированием и т. Д.
-
Если вы обновляете свой current_user
, вы не должны ссылаться на registrations
контроллер. Это для регистрации - вы должны использовать свой users
контроллер:
#config/routes.rb
resource :user_steps, path: "user", only: [:show, :update] #-> url.com/user (singular resource)
#app/controllers/user_steps_controller.rb
class UserStepsController < ApplicationController
def show
end
def update
@user = current_user.update user_params
render_wizard @user
end
private
def user_params
params.require(:user).permit(:name, :middlename, :lastname, :avatar, :aboutMe, :twitterlink, :githublink, :stackrulink, :mediumlink, :dribblerlink, degrees_attributes: [:id, :degreeName, :university, :level, :done, :_destroy])
end
end
Это просто контроллер; вам нужно посмотреть, как form
обрабатывается и передается.
Если вы отправляете данные с вышеуказанным кодом, вам нужно form
HTML и покажи, как Wicked
работает с этим.
Вы должны искать в app/views/users/show.html.erb
для отображения формы, а не /app/views/registrations