2017-02-08 35 views
0

show.html.erb
<% @posts.each do |post|%> 
    <h1><strong>Title</strong></h1> 
    <%= post.Title.upcase %> 
    <h2><i>name</i></h2> 
    <%= post.Name.capitalize %> 
    <p> 
    <b>Message</b> 
    <%=post.Message %> 
    </p> 
<% end -%> 

柱控制器

class PostsController < ApplicationController 
    def index 
    @posts =Post.all 
    end 

    def new 
    @posts =Post.new 
    end 

    def create#no view just for the saving process 
    @posts = Post.new(ok_params) 
    if @posts.save 
     redirect_to posts_path 
    else 
     render 'new' 
    end 
    end 

    def show#we will use it to view the whole mesage 
    @posts=Post.find(params[:id]) 
    end 

    def edit 
    @posts=Post.find(params[:id]) 
    end 

    def update 
    @posts=Post.find(params[:id]) 
    if @posts.update_attributes(ok_params) 
     redirect_to posts_path 
    else 
     render 'new' 
    end 
    end 

    def destroy 
    @posts=Post.find(params[:id]) 
    @posts.destroy 

    redirect_to posts_path 
    end 

    private 

    def ok_params 
    params.require(:post).permit(:Title, :Name, :Message, :Comments) 
    end 
end 

但是,當在服務器中的應用程序運行(我使用薄的,而不是PUMA)表示一個「未知方法##每個」的NoMethod錯誤 the NoMethod error in the show templateNomethod誤差在展示模板

回答

2

發生這種情況是因爲在您的show動作中,您將@posts變量設置爲單個Post實例,而不是Enumerable集合。所以它不能用#each迭代。

在你的節目中,你只是想顯示一個單一的帖子,是嗎?如果是這樣,你不需要使用。每次,只要改變你的節目到:

<h1><strong>Title</strong></h1> 
<%= @post.Title.upcase %> 
<h2><i>name</i></h2> 
<%= @post.Name.capitalize %> 
<p> 
    <b>Message</b> 
    <%= @post.Message %> 
</p> 

,改變你的控制器顯示行動:

def show # we will use it to view the whole mesage 
    @post = Post.find(params[:id]) 
end 

使用,而不是複數的單數,如您只分配一個實例。