我的Rails博客引擎有问题。总体而言,注册和创建帖子作品(它们在SQLite数据库中形成),但是当我尝试列出用户创建的所有帖子时,它会在用户的show.html.erb视图中引发一个NoMethodError:未定义的方法“标题”。NoMethodError在用户#show,未定义的方法标题为#<Post :: ActiveRecord_Associations_CollectionProxy:0x00000004c5e5f0>
PostsController.rb
class PostsController < ApplicationController
before_action :user_is_required, only: [:create, :destroy]
def index
@posts = Post.all
end
def new
@post = Post.new
end
def create
@post = user_logged_in.posts.create(post_params)
if @post.save
flash[:success] = "Your post has been successfully saved."
redirect_to root_path
else
flash[:danger] = "Oops! Something went wrong. Try again."
redirect_to new_post_path
end
end
def edit
end
def update
if @post.update_attributes(post_params)
flash[:success] = "Your post has been successfully updated."
redirect_to post_path(@posts)
else
flash[:danger] = "Oops! Something went wrong. Try again."
render 'post'
end
end
def show
@post = Post.find(params[:id])
end
def destroy
if @post.destroy
flash[:success] = "Your post has been successfully deleted."
redirect_to posts_path
else
flash[:danger] = "Oops! Something went wrong. Try again."
end
end
private
def post_params
params.require(:post).permit(:title, :content)
end
end
show.html.erb(用户视图)
<div class="posts">
<div class="container marketing">
<div class="col-lg-4 col-md-4 col-xs-12 col-sm-12">
<section id="info">
<%= image_tag("#", :class => "user_avatar") %>
<h2 class="user_name">
<%= user_logged_in.name %>
</h2>
</section>
<% if user_logged_in %>
<%= link_to "Change avatar", class: "btn btn-primary" %><br>
<% end %>
<%= link_to "Follow", class: "btn btn-primary" %>
</div>
<div class="col-lg-8 col-md-8 col-sm-12 col-xs-12">
<h2>
<%= user_logged_in.name %> has <%= user_logged_in.posts.count %> posts.
</h2>
<% if user_logged_in.posts.any? %>
<% @posts.each do |post| %>
<h2 class="title">
<%= user_logged_in.posts.title %> # The line which raises the error
</h2>
<p class="post">
<%= user_logged_in.posts.content %>
</p>
<% end %>
<% end %>
</div>
</div>
post.rb
class Post < ActiveRecord::Base
belongs_to :user
default_scope -> { order(created_at: :desc) }
validates :user_id, presence: true
validates :title, presence: true
validates :content, presence: true
end
我是Ruby on Rails的新手,这是我的第一个项目。任何和所有的帮助将不胜感激。
在此先感谢。
我尝试了您提供的代码片段,但仍然无法使用:<%@ user_logged_in.posts.each do | post | %>引发错误:“未定义的方法'帖子为零:NilClass” –
好吧,现在它可以工作,尽管帖子显示为纯HTML。但这是我可以解决的问题。非常感谢! –