ruby on rails - param is missing or the value is empty: user when tring to add a user -
hi know has been asked many times none of me.
i'm building online clinic website based on ruby on rails. when user wants sign chooses either doctor or patient. after sign-in form appears. in db, there's general table users common attributes name, gender etc. in table user type in set. doctor , patient there 2 separate tables specific attributes. here's problem! when signing error: raise parametermissing.new(key)
here's thee code doctor_controller.rb:
class doctorscontroller < applicationcontroller before_action :set_doctor, only: [:show, :edit, :update, :destroy] #before_save :set_type # /doctors # /doctors.json def index @doctors = doctor.all end # /doctors/1 # /doctors/1.json def show end # /doctors/new def new @doctor = doctor.new @user=user.new @user.user_type='2' end # /doctors/1/edit def edit end # post /doctors # post /doctors.json def create @user=user.new(user_params) respond_to |format| if @user.save format.html { redirect_to @user, notice: 'doctor created.' } format.json { render :show, status: :created, location: @doctor } else format.html { render :new } format.json { render json: @user.errors, status: :unprocessable_entity } end end @doctor = doctor.new(doctor_params) respond_to |format| if @doctor.save format.html { redirect_to @doctor, notice: 'doctor created.' } format.json { render :show, status: :created, location: @doctor } else format.html { render :new } format.json { render json: @doctor.errors, status: :unprocessable_entity } end end end # patch/put /doctors/1 # patch/put /doctors/1.json def update respond_to |format| if @doctor.update(doctor_params) format.html { redirect_to @doctor, notice: 'doctor updated.' } format.json { render :show, status: :ok, location: @doctor } else format.html { render :edit } format.json { render json: @doctor.errors, status: :unprocessable_entity } end end end # delete /doctors/1 # delete /doctors/1.json def destroy @doctor.destroy respond_to |format| format.html { redirect_to doctors_url, notice: 'doctor destroyed.' } format.json { head :no_content } end end private # use callbacks share common setup or constraints between actions. def set_doctor @doctor = doctor.find(params[:id]) @user = user.find(params[:id]) end def set_type @user.user_type="2" end # never trust parameters scary internet, allow white list through. def doctor_params params.require(:doctor).permit(:user_id, :doctronum, :adderess, :sepciality, :records) end def user_params params.require(:user).permit(:user_type, :username, :password, :name, :family, :gender, :phone, :city, :profilepicture) end end
and here code signup form:
<%= form_for(@user) |f| %> <% if @user.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@user.errors.count, "error") %> prohibited user being saved:</h2> <ul> <% @user.errors.full_messages.each |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= f.label :username, "email" %><br> <%= f.email_field :username %> </div> <div class="field"> <%= f.label :password %><br> <%= f.password_field :password %> </div> <div class="field"> <%= f.label :name %><br> <%= f.text_field :name %> </div> <div class="field"> <%= f.label :family %><br> <%= f.text_field :family %> </div> <div class="field"> <%= f.label :gender %><br> <%= f.text_field :gender %> </div> <div class="field"> <%= f.label :phone %><br> <%= f.text_field :phone %> </div> <div class="field"> <%= f.label :city %><br> <%= f.text_field :city %> </div> <% end %> <%= form_for(@doctor) |f| %> <% if @doctor.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@doctor.errors.count, "error") %> prohibited doctor being saved:</h2> <ul> <% @doctor.errors.full_messages.each |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= f.label :doctronum %><br> <%= f.text_field :doctronum %> </div> <div class="field"> <%= f.label :adderess %><br> <%= f.text_field :adderess %> </div> <div class="field"> <%= f.label :sepciality %><br> <%= f.text_field :sepciality %> </div> <div class="field"> <%= f.label :records %><br> <%= f.text_field :records %> </div> <div class="actions"> <%= f.submit %> </div> <% end %>
i know it's much. i'd thankful
there no f.submit
button form_for(@user)
, whenever press submit button, form_for(@doctor)
's submit button gets called. hence, params
sent forward, include doctor
, , never include user
. code in create
method expects params
have user
in it: @user = user.new(user_params)
- therefore, generating param missing or value empty: user
.
apart it, not following practices. controller name doctorscontroller
, mixing user's code. should have 2 separate controllers: doctorscontroller
, userscontroller
, , accordingly 2 different views.
Comments
Post a Comment