我已经设置好了,但是当我尝试保存一个从业者时,注意会保存到数据库中。这些表是用户,诊所和从业人员。用户应该能够创建多个诊所,每个诊所应该能够将多个从业人员添加到特定诊所。
我收到此错误![unknown attribute 'practitioners_attributes' for User. ]1
这是到目前为止我试图使它起作用的方式:
用户有很多诊所诊所属于用户
诊所有很多从业人员从业者所属诊所
我添加了外部用户密钥以将诊所表与用户表连接起来
我添加了一个外国诊所钥匙,以将从业人员表与诊所表连接起来>>
user.rb
class User < ApplicationRecord has_many :clinics, dependent: :destroy accepts_nested_attributes_for :clinics, reject_if: :all_blank, allow_destroy: true end
clinic.rb
class Clinic < ApplicationRecord belongs_to :user has_many :practitioners accepts_nested_attributes_for :practitioners, reject_if: :all_blank, allow_destroy: true end
practitioner.rb
class Practitioner < ApplicationRecord belongs_to: clinic end
向从业者添加诊所外键
class AddClinicReferenceToPratitioners < ActiveRecord::Migration[5.2] def change add_reference :practitioners, :clinic, foreign_key: true end end
将用户外键添加到诊所
class AddUserReferenceToClinics < ActiveRecord::Migration[5.2] def change add_reference :clinics, :user, foreign_key: true end end
practitioners_general.html.rb
<div class="content"> <div class="content practitioner"> <h2 class="page-title">Generel information</h2> <%= simple_form_for @user, url: wizard_path, method: :put do |f| %> <%= f.simple_fields_for(:practitioners_attributes) do |p| %> <%= render 'practitioners/practitioners_fields', :f => p %> <% end %> </div> <div class="submit-container"> <%= f.submit "Gem", :class => 'btn blue' %> </div> <% end %> </div>
practitioners_fields.html.erb
<div class="nested-fields"> <div class="basic-section"> <div class="info-group"> <div class="field-group"> <div class="field text-field"> <%= f.input_field :practitioner_first_name, required: true, autofocus: true, autocomplete: "Fornavn", placeholder: "Fornavn" %> </div> <div class="field text-field"> <%= f.input_field :practitioner_last_name, required: true, autofocus: true, autocomplete: "Efternavn", placeholder: "Efternavn" %> </div> </div> </div> </div> <div class="about-section"> <div class="field text-field"> <%= f.input_field :practitioner_description, :as => :text, :input_html => { 'rows' => 5}, autofocus: true, autocomplete: "Beskrivelse af behandler", placeholder: "Beskrivelse af behandler" %> </div> </div> <div class="field-group contact-section"> <div class="field text-field"> <%= f.input_field :practitioner_mail, input_html: { autocomplete: 'email' }, autofocus: true, placeholder: "E-mail" %> </div> <div class="field text-field"> <%= f.input_field :practitioner_phone, autofocus: true, autocomplete: "Tlf. nr.", placeholder: "Tlf. nr." %> </div> <div class="field text-field"> <%= f.input_field :practitioner_website, required: false, autofocus: true, autocomplete: "Hjemmeside", placeholder: "Hjemmeside" %> </div> </div> </div>
registration_steps_controller.rb
class RegistrationStepsController < ApplicationController include Wicked::Wizard steps :company_general, :company_images, :practitioners_general, :practitioners_professions, :practitioners_educations def create @practitioner = Practitioner.new(params[:practitioners]) @practitioner.save end def show @user = current_user render_wizard end def update @user = current_user # Change @user.attributes(user_params) by @user.update_attributes(user_params) @user.update_attributes(user_params) render_wizard @user end private def user_params params.require(:user) .permit(:gender, :first_name, :last_name, :email, :password, :password_confirmation, :phone, :clinic_logo, :practitioner_image, :public_health_insurance, clinic_images: [], profession_ids: [], speciality_ids: [], services_attributes: [:id, :description, :name, :duration, :price, :_destroy], educations_attributes: [:id, :name, :place, :year, :_destroy], membership_ids: [], awards_attributes: [:id, :name, :year, :_destroy], clinics_attributes: [:id, :clinic_logo, :clinic_name, :clinic_address, :clinic_zip_code, :clinic_municipality, :clinic_about, :clinic_mail, :clinic_phone, :clinic_website, :clinic_city, :_destroy], practitioners_attributes: [:id, :practitioner_first_name, :practitioner_last_name, :practitioner_description, :practitioner_mail, :practitioner_phone, :practitioner_website, :_destroy]) end end
ApplicationController.rb
class ApplicationController < ActionController::Base protect_from_forgery with: :exception before_action :authenticate_user!, :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:gender, :first_name, :last_name, :email, :password, :password_confirmation, :phone, :clinic_logo, :practitioner_image, :public_health_insurance, clinic_images: [], profession_ids: [], speciality_ids: [], services_attributes: [:id, :description, :name, :duration, :price, :_destroy], educations_attributes: [:id, :name, :place, :year, :_destroy], membership_ids: [], awards_attributes: [:id, :name, :year, :_destroy], clinics_attributes: [:id, :clinic_logo, :clinic_name, :clinic_address, :clinic_zip_code, :clinic_municipality, :clinic_about, :clinic_mail, :clinic_phone, :clinic_website, :clinic_city, :_destroy], practitioners_attributes: [:id, :practitioner_first_name, :practitioner_last_name, :practitioner_description, :practitioner_mail, :practitioner_phone, :practitioner_website, :_destroy]]) devise_parameter_sanitizer.permit(:account_update, keys: [:gender, :first_name, :last_name, :email, :password, :password_confirmation, :phone, :clinic_logo, :practitioner_image, :public_health_insurance, clinic_images: [], profession_ids: [], speciality_ids: [], services_attributes: [:id, :description, :name, :duration, :price, :_destroy], educations_attributes: [:id, :name, :place, :year, :_destroy], membership_ids: [], awards_attributes: [:id, :name, :year, :_destroy], clinics_attributes: [:id, :clinic_logo, :clinic_name, :clinic_address, :clinic_zip_code, :clinic_municipality, :clinic_about, :clinic_mail, :clinic_phone, :clinic_website, :clinic_city, :_destroy], practitioners_attributes: [:id, :practitioner_first_name, :practitioner_last_name, :practitioner_description, :practitioner_mail, :practitioner_phone, :practitioner_website, :_destroy]]) end def after_sign_in_path_for(resource) rails_admin_path end end
routes.rb
Rails.application.routes.draw do
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
devise_for :users, controllers: {:registrations => "users/registrations"
}
resources :registration_steps
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
root 'pages#index'
get 'about', to: 'pages#about'
get 'team', to: 'pages#team'
get 'faqs', to: 'pages#faqs'
get 'faqspractitioners', to: 'pages#faqspractitioners'
get 'faqsusers', to: 'pages#faqsusers'
get 'login', to: 'pages#login'
get 'signup', to: 'pages#signup'
get 'search', to: 'pages#search'
get "userprofiles/user_info" => "userprofiles#user_info", as: "user_info"
get "userprofiles/clinic_info" => "userprofiles#clinic_info", as: "clinic_info"
get "userprofiles/practitioner_info" => "userprofiles#practitioner_info", as: "practitioner_info"
patch "userprofiles/user_info" => "userprofiles#update"
patch "userprofiles/clinic_info" => "userprofiles#update"
patch "userprofiles/practitioner_info" => "userprofiles#update"
devise_scope :user do
scope module: :users do
resources :registrations, only: [] do
member do
delete :delete_image_attachment
end
end
end
end
end
我已经设置好了,但是当我尝试保存一个从业者时,注意会保存到数据库中。这些表是用户,诊所和从业人员。用户应该能够创建多个诊所,并且每个...
查看此:
更改
有人吗?我完全不知道如何解决此问题