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

您必须添加 :method => :post 到表单以创建对象,否则表单将通过 GET 请求提交。

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

我相信您的问题是您正在尝试在任务表单上创建讨论,但只定义了讨论控制器而不是任务控制器。

于 2012-09-05T15:49:29.790 回答
0

那是具有 form_for的索引视图吗?

如果没有,那么您应该向控制器添加一个@discussion = Discussion.new操作并在那里执行而不是在您的索引操作中。

于 2012-09-05T18:11:31.710 回答
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 回答