我正在开发一个学习Rails的自学项目,可以在github上找到here。 (最新提交包含此错误)
但是我在这里发布所有代码:
型号:photo_post.rb
class PhotoPost < ActiveRecord::Base
belongs_to :user
has_attached_file :image, styles: {
post: "200x200>"
}
end
Controller:PostsController
class PostsController < ApplicationController
def show
@post = Post.find(params[:id])
end
end
Controller:PhotoPostsController
class PhotoPostsController < ApplicationController
def create
content = build_content
post = current_user.posts.build(content: content)
if post.save
redirect_to root_path
else
flash.alert = "Please enter a title"
redirect_to root_path
end
end
private
def build_content
PhotoPost.new(photo_post_parameters)
end
def photo_post_parameters
params.require(:photo_post).permit(:image)
end
end
_post.html.erb
<%= div_for post do %>
<%= link_to post.user.username, post.user %>
suggested
<%= render post.content %>
<%= link_to time_ago_in_words(post.created_at), post %>
home_controller.rb
class HomeController < ApplicationController
protect_from_forgery
def show
@title_post = TitlePost.new
@photo_post = PhotoPost.new
@posts = current_user.posts
end
end
我创建了三个模型。帖子是主要的帖子,TitlePosts和PhotoPosts是帖子下的模型。 标题帖可以正常工作,因为我可以提交标题。 对于Photo Posts,我使用了回形针。但是,我尝试上传图片时出现以下错误:
'nil' is not an ActiveModel-compatible object that returns a valid partial path.
您还可以检查imageshack here上的错误。(带有better_errors的屏幕截图)。 我打算复制相关的代码和文件,但完整的项目可以在我提供的链接的github上找到。如果您需要任何进一步的信息,请问我。
谢谢。 非常感谢任何帮助。
答案 0 :(得分:1)
在点击页面时,没有定义current_user,所以current_user.posts正试图在Nil对象上发帖。
这样可以解决错误,但不能解决您的问题:
HomeController~第7行
@posts = []
if current_user
@posts = current_user.posts
end
您可能还想向控制器添加一些内容以要求进行身份验证,以便设置current_user:
before_filter :authenticate_user!
答案 1 :(得分:1)
好吧这对我来说很奇怪。该错误是由忘记安装ImageMagick引起的。
安装后一切正常。