2017-01-19 6 views
0

を存在している必要があり、私は次のモデルがあります:Railsの5トラブル

class Person < ApplicationRecord 
    has_many :interests, dependent: :destroy 
    accepts_nested_attributes_for :interests 

    validates_presence_of :email 
    validates_inclusion_of :gender, :in => %w(M F), message: "Gender can  only be in M or F" 
    has_secure_password 

    def name 
    "#{first_name} #{last_name}" 
    end 

    def interests_concatenated 
    interests.map { |i| i.interest }.join(", ") 
    end 
end 

class Interest < ApplicationRecord 
    belongs_to :person 
end 

次のように私のコントローラは次のとおりです。次のように

class PeopleController < ApplicationController 

def index 
    @person = Person.all 
end 

def new 
    @person = Person.new 
    @person.interests.build 
end 

def create 
    @person = Person.new(people_params) 
    if @person.save 
    session[:user_id] = @person.id 
    redirect_to(people_path) 
    else 
    flash = "Email or gender can't be blank!" 
    render 'new' 
    end 
end 

private 
    def people_params 
    params.require(:person).permit(:email, :first_name, :last_name, :gender, :password,:password_confirmation, interests_attributes: [:hobby]) 
    end 
end 

私の形式は次のとおりです。

<%= form_for @person do |f| %> 
<p> 
    <%= f.label :email %> <br> 
    <%= f.text_field :email %> 
</p> 
<p> 
    <%= f.label :first_name %> <br> 
    <%= f.text_field :first_name %> 
</p> 
<p> 
    <%= f.label :last_name %> <br> 
    <%= f.text_field :last_name %> 
</p> 
<p> 
    <%= f.label :gender %> <br> 
    <%= f.label(:gender_male, "Male") %> 
    <%= f.radio_button(:gender, "M") %> <br> 
    <%= f.label(:gender_female, "Female") %> 
    <%= f.radio_button(:gender, "F") %> <br> 
</p> 
<p> 
    <%= f.label :password %> <br> 
    <%= f.password_field :password %> 
</p> 
<p> 
    <%= f.label :password_confirmation %> <br> 
    <%= f.password_field :password_confirmation %> 
</p> 
<p> 
    <%= f.fields_for :interests do |i| %> 
    <%= i.label :hobby %> 
    <%= i.text_field :hobby %> 
    <% end %> 
</p> 
<p> 
    <%= f.submit %> 
</p> 
<% end %> 

実行時のコンソールログは以下のとおりです。

console error message

なぜ機能していないのですか。パラメータとは何か関係ありますか?私は、フォームを送信するとここで

は、ログファイルです:

enter image description here

+0

あなたは 'interested_attributes:[:hobby]'を試してみましたか? –

+0

はい、実際にはinterest_attributes:[:hobby]コード内で、私がここに投稿したときにinterest_attributes [:hobby]に表示される理由はわかりません – MLZ

+0

'@interests = @ person.interests.new'ではなくtry '@interests = @ person.interests.build'? –

答えて

0

適切なデフォルト(のような、例えば右person_id)とそれを記入します特別なRailsの会合法であります毎回保存して、最大の手がかりは、エラーメッセージ "興味のある人が存在する必要があります"であった、私はthis StackOverflow solutionが役立つことがわかった。また、このblog post on why this is neededは、問題を明らかにするのに役立った。

誰にも感謝してくれてありがとう!

2

の代わりに:

@interests = @person.interests.new 

は完全に、きれいに、新鮮を作成

@interests = @person.interests.build 

newを試してみてください空の新しいオブジェクト...しかし、build

class Interest < ApplicationRecord 
    belongs_to :person, **optional: true** 
end 

@personはに失敗したので:私は私の興味モデルでこれを追加することにより、ワーキング解決策を見つけた

+0

私はあなたの提案を試みたが、私はまだ同じエラーが発生する – MLZ