-1

当我调用 <%= @post.admin_user.name %> 时出现 NoMethodError,不知道如何解决。

提取的源代码(第 4 行附近):

<h1><%= @post.title %></h1>
<p><%= @post.body %></p>
<small>Post created at <%= @post.created_at.strftime('%b %d. %Y') %></small><br/>   <br/>
<%= @post.admin_user.name %>
<p>Category: <%= link_to @post.category.name, category_path(@post.category.id) %></p>
<%= link_to 'Edit Post', edit_post_path %> | <%= link_to 'Go Back', posts_path %> |     <%= link_to 'Delete Post', @post, :confirm => "Don't do it man!", :method => :delete %>
</div>

显示 c:/Sites/blog/app/views/posts/show.html.erb 其中第 5 行提出:

nil:NilClass 的未定义方法“名称”


这是我的posts_controller.rb

  class PostsController < ApplicationController
     def index
 @post = Post.all


  end

  def new
 @post = Post.new
 @category = Category.all
  end


  def create
  @post = Post.new(post_params)
   if @post.save
   redirect_to posts_path, :notice => 'Your post has been posted!'
   else
   render 'new'
   end
  end


  def post_params
      params.require(:post).permit(:title, :body, :category_id, :admin_user_id, :admin_user, :name)
  end


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

  def update
  @post = Post.find(params[:id])
  if @post.update_attributes(post_params)
     redirect_to post_path, :notice => 'Your post has been updated.'
     else
     render 'new'
    end  
  end

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

  def destroy
  @post = Post.find(params[:id])
      @post.destroy
      redirect_to posts_path, :notice => 'Your post has been deleted.'
   end




   end

这是我的帖子.rb

class Post < ActiveRecord::Base

  belongs_to :category

 belongs_to :admin_user


end

我的 admin_user.rd

class AdminUser < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, 
         :recoverable, :rememberable, :trackable, :validatable

   has_many :posts


end
4

1 回答 1

1

您正在查看的@post没有admin_user关联,因此也没有关联@post.admin_user

要么把它放在一个条件中,所以你只在用户在场时打印出名称,或者使用类似的东西try(例如。@post.admin_user.try(:name))。

于 2013-10-23T06:16:27.120 回答