所以我在堆栈上看到过关于此的其他文章,很多时候人们没有做@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>
这应该意味着我从控制器中遗漏了一些东西.....它是否像拼写错误一样? &GT;&GT;
答案 0 :(得分:1)
您是否尝试过将其放入讨论控制器?
def new
@discussion = Discussion.new
end
答案 1 :(得分:0)
你必须添加:method =&gt; :发布到用于创建对象的表单,否则表单将通过GET请求提交。
<%= form_for @discussion , :method => :post do |f| %>
答案 2 :(得分:0)
我认为您的问题是您正在尝试在任务表单上创建讨论,但只定义了讨论控制器而不是任务控制器。
答案 3 :(得分:0)
具有form_for的索引视图吗?
如果没有,那么您应该向控制器添加新操作,并在那里执行@discussion = Discussion.new
而不是索引操作。
答案 4 :(得分: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