多态协会变坏了?

时间:2013-11-18 18:37:13

标签: ruby-on-rails ruby-on-rails-3

我正在开发一个学习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上找到。如果您需要任何进一步的信息,请问我。

谢谢。 非常感谢任何帮助。

2 个答案:

答案 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引起的。

安装后一切正常。