簡體   English   中英

期望醫生(…),得到了ActionController :: Parameters(…)?

[英]Doctor(…) expected, got ActionController::Parameters(…)?

我正在創建接受嵌套屬性的表單:#doctor.rb

#user.rb
  has_one :doctor
  accepts_nested_attributes_for :doctor, reject_if: proc { |attributes| attributes['cartridge_name'].blank? }, allow_destroy: true

我的強項:

def user_params
      params.require(:user).permit(:name,:birthday, :address, :phone,:email, :role, :social => [],
                    :doctor => [:position,:department_id,:salary_type,:date_came,:monthly_salary,:percentage_salary,:id],
end

但是我得到了錯誤:

Doctor(#70193541488440) expected, got ActionController::Parameters(#70193536484960)

可能是關聯或我的強參數帶來的問題。

編輯:

<%= form_for(@user, url:create_doctor_users_path) do |f| %>
  <%= f.fields_for @doctor do |u| %>
          <%= render 'doctor_attributes', f:u %>
  <% end %>
<% end %>      

EDIT2:

      Parameters: {"utf8"=>"✓", "authenticity_token"=>"birXhqxdplQMfZF5G8jDM9wi1nsBwkJfWsHcE8ZbPCxxemgR8ObmCFzODqoHAcTDo9jNMN0G0HK69A4hGy0Ddg==", 
"user"=>{"name"=>"", "birthday"=>"", "address"=>"", "phone"=>"", "email"=>"", 
"doctor"=>{"position"=>"", "department_id"=>"", "salary_type"=>"Зарплата", "date_came"=>"", "monthly_salary"=>"", "percentage_salary"=>""}, 
"educations_attributes"=>{"0"=>{"from"=>"", "to"=>"", "institution"=>"", "major"=>"", "_destroy"=>"false"}}, 
"job_experiences_attributes"=>{"0"=>{"from"=>"", "to"=>"", "institution"=>"", "position"=>"", "_destroy"=>"false"}}}, "commit"=>"Зарегестрировать"}

而且我認為這很重要,我正在通過以下方式在控制器中進行創建:

@user = User.new
@doctor = Doctor.new
@user.job_experiences.build
@user.educations.build

我想我應該這樣做:

@user.doctor.build

與job_experiences一樣,但出現錯誤:

undefined method `build' for nil:NilClass

將您的user_params修復為此:

def user_params
      params.require(:user).permit(:name,:birthday, :address, :phone,:email, :role, :social => [],
                    :doctor_attributes => [:position,:department_id,:salary_type,:date_came,:monthly_salary,:percentage_salary,:id]
                     ^^^^^^^^^^^^^^^^^
end

說明:如果在模型中使用accepts_nested_attributes_for ,則應傳遞permitted參數,因為doctor_attributes而不是doctor ,在引擎蓋下創建了一個對象Doctor ,如您的錯誤所述。

閱讀有關accepts_nested_attributes_for的精彩文章。

更新:

將您的表格修正為:

  <%= f.fields_for :doctor, @user.build_doctor do |u| %>
       <%= render 'doctor_attributes', f:u %>
  <% end %>

在參數中,您應該看到:

"doctor_attributes"=>{" ....}

代替:

"doctor"=>{" ....} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM