43

Rails の連絡先フォームで次のエラーが表示されます。

First argument in form cannot contain nil or be empty

意見:

     <%= form_for @contact do |f| %>
     and so on.......

コントローラ

def new
    @contact = Contact.new
end
 and so on....

関連するエラーが見つかりましたが、特定の問題に適合する解決策はないようです。これを引き起こしている原因の手がかりはありますか?

4

7 に答える 7

6

これには受け入れられた答えがあることは知っていますが、それは私の同じ問題を解決しませんでした(私の見解では new を使用したくありませんでした)。私の解決したものを投稿するつもりです。

これは常にタイプミスです。ルートが問題ないかどうかを確認することができます$rake routes

私の場合、崇高なエディターを使用していましたが、コントローラーの新しい定義の上に余分な定義がありました。どのようにそこに到達したのかわかりませんが、そこにありました...それを削除すると、約30分後に問題が解決しました爪噛み... この問題の原因は、あらゆる種類のタイプミスである可能性があります。このエラーは、新しいメソッドがアクセスされていないことを意味します。アクセスされていた場合、変数が初期化されていたはずです。

繰り返しますが、いつもどこかでタイプミスをしています。

これが誰にも役立つことを願っています。

于 2016-09-15T07:01:42.920 に答える
6

バックグラウンドページが表示しているものとは異なるモデルに変更を加えたモーダルにフォームがあるという同様の問題がありました。Contact コントローラーに必要な @contact = Contact.new がありましたが、バックグラウンド ページのコントローラー内にこのコードを追加する必要がありました。

たとえば、PhoneBook モデルがあり、PhoneBook のインデックス ビュー内に、Contact モデルに連絡先を追加するフォームを含むモーダルがあります。PhoneBook コントローラーの index メソッド内に @contact = Contact.new が必要です。

class PhoneBook < ApplicationController

  def index
    @contact = Contact.new
    ...
  end
end

そして、PhoneBook index.html に表示されている私のモーダル内のフォームは、他の人が書いたものと同じ構文を持っています:

<div id="phoneBook">
  <div id="myModal" class="modal">
    <%= form_for @contact do |f| %>
    ...
  </div>
</div>
于 2016-07-14T22:17:22.087 に答える
0

new または create アクションがどこで定義されているかによって異なります。私は同じ問題を抱えていました. @Object = object.new コマンドをページメソッド内に配置する必要がありました.

例えば..

class PagesController < ApplicationController

def home
    @applicant = Applicant.new
end

def about
end

def homeowner
end

終わり

私は以前に「新規」および「作成」メソッドを定義し、それらに通常のアクションを持っていましたが、他のインスタンスでも行います。理由はまだわかりません。

于 2016-10-30T17:33:38.757 に答える