2010-12-29 7 views
0

のRails 2.3.5nilのオブジェクトエラー部分にフォームが

を提出しているとき、私は選択フォームは、フォームが、私が使用している配列に対してはnilエラーを取得し提出されている場合を除き、正常に動作している問題を抱えています。 Selectタグがどのように動作しているかを理解していないし、正しいHTMLを生成するだけでなく、フォームがサブミットされたときに配列に対してnilエラーを出す。また、コントローラからロジックを取り出して部分的に直接スティックするとうまく動作します。助けてくれてありがとう。

私は「新しい」方法でこのコードを持っているコントローラでは:

<%= f.select(:directory_id, @directories, :prompt => 'Select') %> 

これをレンダリング:「新しい」ビューの部分の内側

@directories = Directory.find(:all, :conditions => {:id => session[:directories_with_view_access]}) 
@directories.collect! {|u| [u.name, u.id]} 

、私はこのコードを持っていますHTML:

<select id="card_directory_id" name="contact[directory_id]"><option value="">Select</option> 
<option value="2">dir_test_1</option> 
<option value="4">dir_test_2</option> 
<option value="6">dir_test_3</option> 

問題がある、私がフォームを送信するとき、私は次のエラーを取得する:

You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.inject

私は、コントローラの外にロジックを取り、部分的にそれを置く場合は、すべてが正常に動作します:selectタグの

<%= f.select(:directory_id, Directory.find(:all, :conditions => {:id => session[:directories_with_view_access]}).collect {|u| [u.name, u.id]}, :prompt => 'Select') %> 

答えて

1

ご利用には、ここでは問題ではありません。

スタックトレースを送信した場合、私はあなたの問題をよりよく診断できますが、説明したことから、あなたのフォームは投稿リクエストをcreateなどのアクションに投稿してからリダイレクトしますフォームを部分的にレンダリングしているページ。新しいアクションで設定されたビューのレンダリングを担当するリダイレクトされたアクションに@directoryが設定されていません。リダイレクトURLのためのあなたの作成アクションで

ルックは、それはあなたの新しいアクションであるのと同様に、(redirect_to url_for(@object)のように、非常に可能性showアクション)そのアクションに設定されていることを確認@directoriesを作ります。

ここで理解すべき重要なことは、コントローラのアクションが実際にPOSTリクエストを処理していること、ビューをレンダリングするアクション、および必要な変数がそこに定義されていることを確認することです。 RESTfulなルートを読むことは、従来のRailsアーキテクチャを使用している場合(script/generateのスクリプトによって構築されるなど)には不可欠です。

+0

あなたはまったく正しいです。作成アクションで@directories declerationのコピーが問題を修正しました。私は約4ヶ月しかRailsを学習していませんが、RESTfulなルートではなく、常に読んでいます。本当にありがとう! – Reno

関連する問題