私は親レコードと子レコードを同時に作成したいというフォームを持っています。簡単な例として、最初のEmployeeを持つ会社を挙げましょう。Railsを使った複雑なフォーム
def new
@company = Company.new
@company.employees.new
end
と、この私の見解では:
<%= form_for(@company) do |form| %>
<div>
<%= form.label :name %>
<%= form.text_field :name %>
</div>
<%= form.fields_for :employees do |employee_form| %>
<div>
<%= employee_form.label :name %>
<%= employee_form.text_field :name %>
</div>
<% end %>
<% end %>
と戻って私のコントローラでの再:
def create
@company = Company.new(params[:company])
@company.employees << Employee.new(params[:company][:employees_attributes]["0"])
# save stuff
end
質問1私のコントローラで
私は何かのように実行します。
フォームに作成された1人の従業員が移入される会社の従業員コレクションを取得できませんでした。私はparamsを見て、[:employees_attributes] ["0"]のものを見つけました。
私はうまくいっていますが、これを行うにきれいな方法がありますか?
質問2:
検証が従業員のために合格しない場合、私は一般的な取得の代わりに名前必要なバリデータメッセージの「従業員は無効です」。私はコレクション上でsaveを呼び出していますが、レールは検証エラーをバブリングするために最善を尽くしていますが、これを行うためのクリーンな方法がありますので、従業員固有のエラーを得ることができますか?
ショート で
私はこれをクリーンアップすることができますどのように関連したモデルは、のparamsから自動的に作成され、私は、単一の従業員のための検証メッセージを取得するように。
ありがとうございます。
おかげで明確に願っています。私はすでに親モデルにaccepts_nested_attributes_forを設定しています。私はすでにmodel.errors.full_messages.eachを部分的に持っていますが、「名前は空白にできません」ではなく、「従業員は無効です」と表示されます。この2つの微妙なニュアンスを読んだら、ビルドの提案は意味があります。私はすでに助けを求める前にRailscastsを見てきました。それがどこに残っているのかわからない、他のアイデアはすばらしいが、他に何ができるかわからない。再度、感謝します。 – blu
私はこれらの点をカバーしましたが、おそらく私は十分にはっきりしていないと言いました。 – jamesc
@blu - 私は自分の答えを更新しました。うまくいけば、私はあなたに与えた情報をどのように使用するのかを見ることができます – jamesc