NoMethodError in Posts#show---未定义的方法'title'(博客教程)
NoMethodError in Posts#show---Undefined method 'title'(Blog Tutorial)
在我的显示视图中出现未定义方法 'title' 错误。这已在其他帖子中发布并解决了几个问题,但似乎与我的问题不同。
我还仔细检查了我可以通过 rails 控制台从数据库中读取,一切看起来都很好。
Loading development environment (Rails 4.2.3)
irb(main):001:0>
irb(main):002:0*
irb(main):003:0* post = Post.find(4)
Post Load (1.0ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = LIMI
T 1 [["id", 4]]
=> #<Post id: 4, title: "Why Title Why", body: "Where is the Body??", category_i
d: nil, author_id: nil, created_at: "2015-08-12 14:49:38", updated_at: "2015-08-
12 14:49:38">
irb(main):004:0> post.title
=> "Why Title Why"
irb(main):005:0>
routes.rb
Rails.application.routes.draw do
get 'categories/index'
get 'categories/edit'
get 'categories/new'
get 'categories/show'
get 'home/index'
resources :posts
resources :categories
root 'home#index'
database.yml
default: &default
adapter: postgresql
username: postgres
password: aaaaa
pool: 5
timeout: 5000
development:
<<: *default
database: mysecondblog
Post_controller
class PostsController < ApplicationController
def index
@posts = Post.all
end
def show
@posts = Post.find(params[:id])
end
def new
end
def create
end
def edit
end
def update
end
def destroy
end
private
def post_params
params.require(:post). permit( :title, :body, :category_id, :author_id)
end
end
posts\show.html.erb
<h1><%= @post.title %></h1>
<small><%= @post.created %></small>
<p><%= @post.body %></p>
感谢您的帮助
您在控制器中有@posts 变量(@posts = Post.all),可以从视图访问。
当你呈现视图文件时(show.html.erb) - 你要求视图找到带有参数.title,.created,.body的变量@post - @posts inside视图中的控制器和@post - 不同的变量。
所以,你需要改变你的看法show.html.erb
<h1><%= @posts.title %></h1>
<small><%= @posts.created_created %></small>
<p><%= @posts.body %></p>
或Controller函数内部的变量:
def index
@post = Post.all
end
def show
@post = Post.find(params[:id])
end
在我的显示视图中出现未定义方法 'title' 错误。这已在其他帖子中发布并解决了几个问题,但似乎与我的问题不同。
我还仔细检查了我可以通过 rails 控制台从数据库中读取,一切看起来都很好。
Loading development environment (Rails 4.2.3)
irb(main):001:0>
irb(main):002:0*
irb(main):003:0* post = Post.find(4)
Post Load (1.0ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = LIMI
T 1 [["id", 4]]
=> #<Post id: 4, title: "Why Title Why", body: "Where is the Body??", category_i
d: nil, author_id: nil, created_at: "2015-08-12 14:49:38", updated_at: "2015-08-
12 14:49:38">
irb(main):004:0> post.title
=> "Why Title Why"
irb(main):005:0>
routes.rb
Rails.application.routes.draw do
get 'categories/index'
get 'categories/edit'
get 'categories/new'
get 'categories/show'
get 'home/index'
resources :posts
resources :categories
root 'home#index'
database.yml
default: &default
adapter: postgresql
username: postgres
password: aaaaa
pool: 5
timeout: 5000
development:
<<: *default
database: mysecondblog
Post_controller
class PostsController < ApplicationController
def index
@posts = Post.all
end
def show
@posts = Post.find(params[:id])
end
def new
end
def create
end
def edit
end
def update
end
def destroy
end
private
def post_params
params.require(:post). permit( :title, :body, :category_id, :author_id)
end
end
posts\show.html.erb
<h1><%= @post.title %></h1>
<small><%= @post.created %></small>
<p><%= @post.body %></p>
感谢您的帮助
您在控制器中有@posts 变量(@posts = Post.all),可以从视图访问。
当你呈现视图文件时(show.html.erb) - 你要求视图找到带有参数.title,.created,.body的变量@post - @posts inside视图中的控制器和@post - 不同的变量。
所以,你需要改变你的看法show.html.erb
<h1><%= @posts.title %></h1>
<small><%= @posts.created_created %></small>
<p><%= @posts.body %></p>
或Controller函数内部的变量:
def index
@post = Post.all
end
def show
@post = Post.find(params[:id])
end