2010-12-07 3 views
1

Rails:作成に失敗した後にヘルパー値を選択する

<% form_for @invoice do |f| %> 
<%= render :partial => "invoice_item_fields", :locals => {:f => f} %> 
<% end %> 

と_invoice_items_fields:

<% f.fields_for :invoice_items do |builder| %> 
<%= link_to_remove_fields "remove", builder %> 
<%= builder.collection_select(:product_id, Product.all, :id, :name) %> 
<%= builder.text_field :quantity, :size => 4,%> 
<% end %> 

フォームを送信すると、検証に合格しません。新しい アクションが再びレンダリングされます。物は選択された値です:product_idは が記憶されていませんが、:量はOKです。私は オプションの値を持つ インスタンス変数を設定して、選択した オプションの値を設定して、次に何かをしなければならないことを読んだ。

<%= builder.collection_select(:product_id, Product.all, :id, :name, 
:selected => @selected_product) %> 

しかし、アプリケーションには多くの:invoice_items、選択フィールドのために何をすべきかを知っていないので、値を覚えておいてください。

ありがとう。

+0

この例を見てきましたか(まったく同じではありませんが...):http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_selectまた、生成されたhtmlでコメントを投稿することもできます(selectのみ)。 collection_selectの使い方が間違っていると思います。検証がパスされると、選択した製品のデータベースにレコードが保存されますか? –

+0

こんにちは、コントローラコード、plsを表示できますか?あなたのページに@invoice(またはネストされたフィールドを持つ他のオブジェクト)用のフォームがたくさんある場合、どのようにリクエストを処理しますか? – Bohdan

答えて

0

この種の問題は、しばしば製品のIDが整数であることに関連していますが、フォームビルダーが文字列であることと比較しているproduct_idです。それが問題、-美しいではない - しかし、それ-作品部門からの修正はならto_i呼び出すことです:

builder.collection_select(builder.object.product_id.to_i, Product.all, :id, :name) 

私はそれを行うためのよりよい方法を見てみたいです。

デバッグ時に問題になることが多い他のものは、ページを更新すると、強調表示されたエントリに選択を残します.HTMLを再度参照せずに、今選択する必要があるものを選択します。つまり、最初に間違った属性を選択してコードを修正してリフレッシュすると、ブラウザは実際に変更内容を表示しません。

+0

こんにちは、私は正しく、collection_selectヘルパーを使用していないと思います。今、私は "collection_select(:product_id、Product.all、:id、:name)"を使用しています。あなたの返信のおかげで、今、正しいトラックにいます。 – pbruna

関連する問題