2012-03-08 17 views
2

私はこれら2つのモデルを持っています:CompanyとCompanyContact。Rails 3.ネストされたモデルフォームは1つしか表示できません。

だから私は、私はすでに会社の会社の連絡先を持っている場合、それは私にその既存のレコードプラスにする準備ができて別の空の会社の連絡先フォームを与え、編集フォームで通常...

companies_controller.rb 
def edit 
    @company = Company.find(params[:id]) 
    student = @company.students.build 
    company_contact = @company.company_contacts.build 
end 

company.rb 
has_many :company_contacts, :dependent => :destroy 
accepts_nested_attributes_for :company_contacts, :reject_if => :reject_company_contacts, :allow_destroy => true 

company_contact.rb 
belongs_to :company 

form.html.erb 
<%= f.fields_for :company_contacts do |builder| %> 
    <%= render "company_contact_fields", :f => builder %> 
<% end %> 

_company_contacts.html.erb 
<p style="margin:5px 0;"> 
    <%= f.label :first_name %><br /> 
    <%= f.text_field :first_name, :class => 'text_field' %> 
</p> 

<p style="margin:5px 0;"> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email, :class => 'text_field' %> 
</p> 

を持っています記入。それは起こるはずだから大丈夫です。

私は、会社の連絡先が1つしかないので、会社の連絡先が既にある場合は、追加の会社の連絡先を追加するための別のフォームを表示したくありません。クライアントが将来的に余分な会社の連絡先を追加したいと思うかもしれないし、has_one関係を試したときにエラーがたくさんあるので、has_one関係をセットアップしたくありません。

会社ごとに会社の連絡先が1つしかない場合は、カウンタの解決策を試しましたが、counter = 0を設定してカウンタ> 0であることを確認しましたが、解決策は機能しませんでした。何をお勧めしますか?

答えて

0

私はあなたが修正しました場合には、

@company.company_contacts.build unless @company.company_contacts.present? 

は、あなたが探しているものです。

この方法では、会社に既に連絡先がある場合、連絡先はもう作成されません。同様に、会社に連絡がない場合は、f.fields_for :company_contactsによって連絡先が作成され、フォームに表示されます。

関連する問題