2017-07-21 10 views
0

私は簡単なことをしようとしていますが、私はちょうど通過できません!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 

はありがとうございました!

+3

あなたは 'form.fields_for:phones'(複数の電話機)を使用する必要があります – bcd

答えて

1

レールの複数化には十分注意してください。あなたの協会がhas_manyまたはhas_and_belongs_to_manyの場合は、一貫して複数形を使用する必要があります。

def contact_params 
    params.require(:contact).permit(:name, 
    phones_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 :phones do |phone_field| %> 
    <div class="field"> 
     <%= phone_field.label :number %> 
     <%= phone_field.text_field :number %> 
    </div> 

    <div class="field"> 
     <%= phone_field.label :number_type_id %> 
     <%= collection_select(:phone, :number_type_id, @number_types_for_select, :id, :description) %> 
    </div> 
    <% end %> 
<% end %> 
+0

OH MY GOD!私はこれらのことを何千回も見ましたが、ここには複数のものがあります。変化し、変化しました。それは私が逃したものだとは信じられません!!指摘ありがとうございます! :))thesものは、初心者のためのトリッキーです、私は推測する! –

+0

ですから、私は別の問題にぶつかりました。連絡先を作成するときに、phone_typeが存在しなければならないと言います。事は、osが存在するはずです。私は許可された属性でそれを設定し、私はコレクションの選択権をしたと思うが、私はそうは思わない。私は質問を編集します –

0

[OK]を、ので、私はなぜ知らないが、私はそれが動作するようになりました。

問題はcollection_selectコードにありました。

それはでした:

<%= collection_select(:phone, :number_type_id, NumberType.all, :id, :description) %> 

それはとして働いていた:なぜ、私は理解してみたい知っている場合

<%= f.collection_select(:number_type_id, NumberType.all, :id, :description) %> 

ありがとうございました!

関連する問題