入れ子になったフォームの to-many リレーションにフィールドを追加する機能を追加したい Rails フォームがあります。私はこのような形をしています。
= form_for @company do |f|
= f.label :name, "Company name"
= f.text_field :name
= f.label :homepage_url, "Company website"
= f.text_field :homepage_url, placeholder: "www.mycompanywebsite.com"
= render "domains_form"
%div{class: "add_more_button"}
= link_to "Add more domains", "add_domain", remote: true, data: {mini: "true", theme: "b", iconpos: "left", icon: "plus", role: "button"}, id:"more_email_domains"
= f.submit "Continue", data: {theme: "a", icon: "arrow-r", iconpos: "right"}
部分的な「domain_form」は次のようになります。
= fields_for @company do |f|
= f.fields_for :domains do |d|
= d.label :identifier, "Domain name"
= d.text_field :identifier
これにより、次のようなエラーが表示されます。
undefined method `[]' for nil:NilClass
Extracted source (around line #2):
1: %div
2: = fields_for @company do |f|
部分的に @company インスタンスを見つけることができなかったようですが、どうしてでしょうか? メイン テンプレートにはインスタンスへのアクセス権があるため、部分テンプレートにもインスタンスへのアクセス権があるべきではありません。会社のインスタンスをロケールとして排他的に渡す必要がありますか?
グローバルメソッドとして使用するのではなく、 form_builder オブジェクトで使用していないため、 fields_for 呼び出しで問題が発生する可能性が高くなります。Rails api は、メソッドをスタンドアロンhttp://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_formで使用できることを示唆しているため、最初の fields_for が親オブジェクトを受け取り、次のフィールドが取得します子供、これは私の仮定ではうまくいくはずです。これで私を助けてくれませんか。
ありがとう