私はRailsGuidesチュートリアル(ブログアプリケーションの作成)を進めています。私がサーバを起動して開いたとき:/posts/new
すべてがうまく見えます。しかし、私はポストを作成しようとすると、私はこのエラーを取得:"未定義メソッド` title for nil:NilClass "Railsガイドチュートリアル
NoMethodError in Posts#show
Showing /home/darek/rails_projects/blog/app/views/posts/show.html.erb where line #3 raised:
undefined method `title' for nil:NilClass
抽出されたソース(ライン#周り3):実際のポストで
1 <p>
2 <strong>Title:</strong>
3 <%= @post.title %>
4 </p>
5 <p>
が作成され、私はタイトルと内容を見ることができますat/posts しかし、私はこの特定の投稿を表示しようとするとこのエラーが出ます。 私の最初の手がかりは
<%= @post.try(:title) %>
エラーがなくなっているにライン
<%= @post.title %>
変更することでしたが、問題が解決されていません。
特定の投稿を表示しようとすると、タイトルとテキストフォームが空になります。また、私が見たいものではありません。
[OK]を、ここにコード
Show.html.erb
がある<p>
<strong>Title:</strong>
<%= @post.title %>
</p>
<p>
<strong>Text:</strong>
<%= @post.text %>
</p>
<h2>Add a comment:</h2>
<%= form_for([@post, @post.comments.build]) do |f| %>
<p>
<%= f.label :commenter %><br />
<%= f.text_field :commenter %>
</p>
<p>
<%= f.label :body %><br />
<%= f.text_area :body %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
<%= link_to 'Edit Post', edit_post_path(@post) %> |
<%= link_to 'Back to Posts', posts_path %>
)Posts_controller.rb
class PostsController < ApplicationController
def new
@post = Post.new
end
def index
@posts = Post.all
end
def create
@post = Post.new(params[:post].permit(:title, :text))
if @post.save
redirect_to @post
else
render 'new'
end
end
private
def post_params
params.require(:post).permit(:title, :text)
end
def show
@post = Post.find(params[:id])
end
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update(params[:post].permit(:title, :text))
redirect_to @post
else
render 'edit'
end
end
def destroy
@post = Post.find(params[:id])
@post.destroy
redirect_to posts_path
end
end
レーキルート:
-VirtualBox:~/rails_projects/blog$ rake routes
Prefix Verb URI Pattern Controller#Action
post_comments GET /posts/:post_id/comments(.:format) comments#index
POST /posts/:post_id/comments(.:format) comments#create
new_post_comment GET /posts/:post_id/comments/new(.:format) comments#new
edit_post_comment GET /posts/:post_id/comments/:id/edit(.:format) comments#edit
post_comment GET /posts/:post_id/comments/:id(.:format) comments#show
PATCH /posts/:post_id/comments/:id(.:format) comments#update
PUT /posts/:post_id/comments/:id(.:format) comments#update
DELETE /posts/:post_id/comments/:id(.:format) comments#destroy
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PATCH /posts/:id(.:format) posts#update
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
root GET / welcome#index
GET /posts/:id(.:format) posts#view
DELETE /posts/:id(.:format) posts#destroy
ありがとうfまたは助けと興味!
Rubyの空白問題!この行はソースコード内で正しくインデントされていますか? '@post = Post.new(params [:post] .permit(:title、:text))'? 'redirect_to @ post'と' params.require(:post).permit(:title、:text) 'も適切にインデントされていません。 –
申し訳ありません@アンドレディオン..それは重要ではありません。はい、それは適切にインデントされている場合、きれいに見えます。 –
あなたの@postオブジェクトにはtitleが入っていますか? –