我正在按照Rails 4.0.0的入门教程进行操作: http://guides.rubyonrails.org/getting_started.html
我正处于5.7节中我应该得到ActiveModel :: ForbiddenAttributes错误的地方。相反,我得到了这个错误:
NoMethodError in Posts#show
Showing C:/Rails/blog/app/views/posts/show.html.erb where line #8 raised:
undefined method `text' for nil:NilClass
Extracted source (around line #8):
5
6 <p>
7 <strong>Text:</strong>
8 <%= @post.text %>
9 </p>
尽管如此,我相信这些帖子正在创建,因为每次提交表单时ID都会增加。我是Rails的新手,并试图完全按照说明进行操作。
我正在使用Ruby 1.9.3和Rails 4.0.0运行Windows 7 x64。
以下是一些相关文件;如果有其他要求,请告诉我。
class PostsController < ApplicationController
def new
end
def create
@post = Post.new(post_params)
@post.save
redirect_to @post
end
private
def post_params
params.require(:post).permit(:title, :text)
end
def show
@post = Post.find(params[:id])
end
end
<p>
<strong>Title:</strong>
<%= @post.title %>
</p>
<p>
<strong>Text:</strong>
<%= @post.text %>
</p>
<h1>New Post</h1>
<%= form_for :post, url: posts_path do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
答案 0 :(得分:2)
只需在show
方法后写下create
方法,因为您的show方法位于关键字private
之下,它将私有作为Access Modifier
,因此无法访问直接通过浏览器
class PostsController < ApplicationController
def new
end
def create
@post = Post.new(post_params)
@post.save
redirect_to @post
end
def show
@post = Post.find(params[:id])
end
private
def post_params
params.require(:post).permit(:title, :text)
end
end
答案 1 :(得分:1)
我在教程中遇到了同样的问题(在此日期(2014年11月18日)使用'文章'而不是'帖子'),并发现解决方案是放置以下“def”块在articles_controller.rb中:
def show
@article = Article.find(params[:id])
end
这就是我的样子:
class ArticlesController < ApplicationController
def new
end
def create
@article = Article.new(article_params)
@article.save
redirect_to @article
end
def show
@article = Article.find(params[:id])
end
private
def article_params
params.require(:article).permit(:title, :text)
end
end