0

だから私はこれについてのスタック上の他の記事を見てきましたが、多くの場合、人々は @post = post.new をしていません。複数形を使用する場所を読みました...??

ディスカッションコードでこのエラーが発生する方法:

モデル

class Discussion < ActiveRecord::Base
  has_many :comment
  belongs_to :author
  attr_accessible :author_id, :content, :title

  validate :comment, :presence => true
  validate :title, :presence => true
end

ディスカッション コントローラー

class DiscussionsController < ApplicationController
  def index
    @discussion = Discussion.new
    @discussions = Discussion.all
  end

  def create
    @discussion = Discussion.create(params[:discussion])
    if @discussion.save
      redirect_to tasks_path, :flash => {:success => 'Created a new discussion'}
    else
      redirect_to tasks_path, :flash => {:error => 'Failed to create a discussion'}
    end
  end
end

ディスカッションフォーム

<%= form_for @discussion do |f| %>

    <p><%= f.label :title %>
    <%= f.text_field :title %></p>

    <p><%= f.label :content %>
    <%= f.text_area :content %></p>

<% end %>

ディスカッション ルート

  resources :discussions do
    resources :comments
  end

タスクフォームを本質的に同じように設定しているため、私が知る限り、これを正しく行っていますが、コードを何時間も見て、グーグルで他の例を試してみたところ、次のようになりました。

undefined method `model_name' for NilClass:Class

Extracted source (around line #1):

1: <%= form_for @discussion do |f| %>
2: 
3:  <p><%= f.label :title %>
4:  <%= f.text_field :title %></p>

これは、コントローラーから何かが失われていることを意味するはずです...それはスペルミスと同じくらいばかげていますか? >.>

4

5 に答える 5

1

これをディスカッションコントローラーに入れてみましたか?

def new
  @discussion = Discussion.new
end
于 2012-09-07T01:09:19.900 に答える
0

あなたのモデルの関係があなたが提供したものとまったく同じである場合、それらは正しくありません

class Discussion < ActiveRecord::Base
  has_many :comment #has_many :comments
  belongs_to :author
  attr_accessible :author_id, :content, :title

  validate :comment, :presence => true #valide :comments, :presence => true
  validate :title, :presence => true
end
于 2012-09-05T18:48:42.533 に答える
0

あなたの問題は、タスクフォームでディスカッションを作成しようとしているが、タスクコントローラーではなくディスカッションコントローラーのみを定義していることだと思います。

于 2012-09-05T15:49:29.790 に答える
0

オブジェクトを作成するために :method => :post をフォームに追加する必要があります。そうしないと、フォームは GET リクエストで送信されます。

<%= form_for @discussion , :method => :post do |f| %>
于 2012-09-05T15:47:34.467 に答える
0

それは、form_for を持つインデックス ビューですか?

そうでない場合は、コントローラーに新しいアクションを追加して、インデックスアクション@discussion = Discussion.newではなくそこで実行する必要があります。

于 2012-09-05T18:11:31.710 に答える