遇到错误"帖子中的NoMethodError#show"

时间:2017-03-20 03:56:27

标签: ruby-on-rails ruby nomethoderror

我在windows中的rails上使用ruby中的新东西..我正在关注一些guide through youtube,但我遇到了错误

问题:在<%= @post.item %>的部分内容中,我应该在@post中添加什么内容?在我的另一个视图中,它是我的方法还是字段的名称?

  

&#34;帖子#NoMethodError显示未定义的方法`item&#39;为零:NilClass       提取的来源(第2行):       1       2&lt;%= @ post.item%&gt; #错误表示此处       3       4       5已提交:&lt;%= time_ago_in_words(@ post.created_at)%&gt;前       6

控制器

class PostsController < ApplicationController
    def index
    end
    def addItem
    end
    def create
      @post = Post.new(post_params)
      @post.save
      redirect_to @post
    end
    private
        def post_params
            params.require(:post).permit(:item, :description)
        end
    def show
        @post = Post.find(params[:id])
    end
end

Show.html.erb视图

<h1 class="item">
    <%= @post.item %>
</h1>
<h1 class="date">
    Submitted:<%= time_ago_in_words(@post.created_at) %> Ago
</h1>
<h1 class="description">
    <%= @post.description %>
</h1>
<h1 class="date">
    Submitted:<%= time_ago_in_words(@post.created_at) %> Ago
</h1>

路线

Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  resources :posts
  root "posts#index"
  resources :posts
  root "posts#addItem"
end

3 个答案:

答案 0 :(得分:2)

show方法移到private

之上

答案 1 :(得分:1)

在Ruby中,您在private关键字下面添加的所有方法都成为私有方法。

在您的情况下,show方法是私有的,因此@post变量在视图中不可用。

将您的posts_controller代码更改为此

class PostsController < ApplicationController

    def index
    end

    def create
      @post = Post.new(post_params)
      @post.save
      redirect_to @post
    end

    def show
      @post = Post.find(params[:id])
    end

    def addItem
    end

    private
      def post_params
        params.require(:post).permit(:item, :description)
      end
end

答案 2 :(得分:0)

检查模型(表格)中是否有“item”字段