私は簡単なことをしようとしていますが、私はちょうど通過できません!Rails 5許容されないパラメータ
シンプルなノートブックアプリ:連絡先、電話番号、PhoneType。
モデル:
class Contact < ApplicationRecord
has_many :phones, inverse_of: :contact
accepts_nested_attributes_for :phones, allow_destroy: true
end
class NumberType < ApplicationRecord
has_many :phones, inverse_of: :number_types
end
class Phone < ApplicationRecord
belongs_to :number_type
belongs_to :contact
end
コントローラー:
def contact_params
params.require(:contact).permit(:name,
phone_attributes:[:number, :number_type_id, :contact_id, :_destroy])
end
ビュー:
<%= form_with(model: contact, local: true) do |form| %>
.
.
.
<div class="field">
<%= form.label :name %>
<%= form.text_field :name, id: :contact_name %>
</div>
<%=form.fields_for :phone do |phone_field| %>
<div class="field">
<%= phone_field.label :number %>
<%= phone_field.text_field :number %>
</div>
<div class="field">
<%= phone_field.label :number_type %>
<%= collection_select(:phone, :number_type_id, @number_types_for_select, :id, :description) %>
</div>
<%end%>
事は、私が新しい連絡先を保存することができますが、それは、電話番号を保存していないということです...ログに「Unpermitted parameter:」と表示されます 連絡先の名前は保存されますが、残りは保存されません。
また、テストのためにPhoneTypeをいくつか作成しました。ここで
はログです:SO
Started POST "/contacts" for 127.0.0.1 at 2017-07-21 17:03:48 -0300
Processing by ContactsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"n4LQ6EjssSBp6yCTOni1B9qKUAygzUJMMTN+12Fth6AO2dblXmySdOdjab/ABg3PI19oF9nsyGIVjYa3YyAVPw==", "contact"=>{"name"=>"Mendel", "phone"=>{"number"=>"1234567890"}}, "phone"=>{"number_type_id"=>"1"}, "commit"=>"Create Contact"}
Unpermitted parameter: :phone
(0.1ms) begin transaction
SQL (0.8ms) INSERT INTO "contacts" ("name", "created_at", "updated_at") VALUES (?, ?, ?) [["name", "Mendel"], ["created_at", "2017-07-21 20:03:48.952923"], ["updated_at", "2017-07-21 20:03:48.952923"]]
(0.6ms) commit transaction
!私はここで何を変えるべきか分からない。私はここで答えを読んでいますが、私はちょうどそれを正しく得ることはできません。私はこれをよく知っていて、コーディングに自信を持っています。
ヘルプは非常に高く評価されます! :)
は
<ありがとう - !私は新しい連絡先を作成するときにPART 2 --->
、ここで問題があります。:
私が取得:
電話NUMBER_TYPEが存在している必要があります。
で呼ばれる部分として<div class = "nested-fields">
<div class="field">
<%= f.label :number %>
<%= f.text_field :number %>
<%= f.label :number_type %>
<%= collection_select(:phone, :number_type_id, NumberType.all, :id, :description) %>
<%= link_to_remove_association('[delete]',f)%>
</div>
</div>
:
ビューはようになり
<%=form.fields_for :phones do |phone_field| %>
<%= render partial: "phone_fields", locals: {f: phone_field} %>
<%end%>
<%=link_to_add_association('[+ phone]', form, :phones)%>
それはのparamsの権限を持つかを選択し、私はコレクションTUP設定方法に問題ありか?
これは私がサーバーで得るものです:
Started POST "/contacts" for 127.0.0.1 at 2017-07-22 13:13:24 -0300
Processing by ContactsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"PJxUoaoaAQh5Q7sXKgkUrnfppNQjRTLhdkyaIJdifDKtx1KsvJoiXPfL8jvQd6xmjjycz1pkuM9S8mJAlS/urQ==", "contact"=>{"name"=>"Mendel", "phones_attributes"=>{"1500740000317"=>{"number"=>"123456", "_destroy"=>"false"}}}, "phone"=>{"number_type_id"=>"1"}, "commit"=>"Create Contact"}
(0.1ms) begin transaction
(0.1ms) rollback transaction
はありがとうございました!
あなたは 'form.fields_for:phones'(複数の電話機)を使用する必要があります – bcd