将Dragonfly gem链接到index.html.erb时获取NameError

时间:2015-06-13 23:51:37

标签: html ruby-on-rails ruby-on-rails-4 rubygems dragonfly-gem

我已经将Dragonfly gem链接到了我的项目,它将图像上传到了通过_form创建帖子,但是当我尝试将所有这些创建的帖子添加到index.html.erb并使用Dragonfly-gem图像上传时,它显示了一个NameError。 我已经在几个项目中完成了这个操作,但在这个项目中我不知道错误来自哪里。情况就是这样:

帖子#index中的NameError 未定义的局部变量或#<#:0x66f9d20>

的方法`posts'

提取的来源(第5行):

5. <%= link_to image_tag(posts.image.thumb('64x64!').url) %>

帖子控制器:

class PostsController < ApplicationController
    before_action :find_post, only: [:show, :edit, :update, :destroy]
    before_action :authenticate_user!, except: [:index, :show]

    def index
        @posts = Post.all.order("created_at DESC")
    end

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

    def new
        @post = current_user.posts.build
    end

    def create
        @post = current_user.posts.build(post_params)

        if @post.save
            redirect_to @post
        else 
            render 'new'
        end
    end

    def edit

    end

    def update
        if @post.update(post_params)
            redirect_to @post
        else
            render 'edit'
        end
    end

    def destroy
        @post.destroy
            redirect_to root_path
    end

    private

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

    def post_params
        params.require(:post).permit(:title, :link, :description, :image)
    end

end

index.html.erb:

<% @posts.each do |post| %>
<h2><%= link_to post.title, post %></h2>
<% end %>
<%= link_to image_tag(posts.image.thumb('64x64!').url) %>

发布模型:

class Post < ActiveRecord::Base
    belongs_to :user
    dragonfly_accessor :image
end

用户模型:

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

Show.html.erb:

<h1><%= @post.title %></h1>
<%= image_tag @post.image.thumb('300x300#').url if @post.image_stored? %>
<p><%= @post.link %></p>
<p><%= @post.description %></p>
<p><%= @post.user.name %></p>

2 个答案:

答案 0 :(得分:0)

尝试更改index.html.erb这样的

<% @posts.each do |post| %>
<h2><%= link_to post.title, post %></h2>
<%= link_to image_tag(post.image.thumb('64x64!').url) %>
<% end %>

答案 1 :(得分:0)

index.html.erb

<% @posts.each do |post| %>
  # inside 
  <h2><%= link_to post.title, post %></h2>
<% end %>
<%= link_to image_tag(posts.image.thumb('64x64!').url) %> # outside

因此,您无法通过post访问循环外的@posts

要使用post,您需要将image_tag放入循环中。

就像您使用post呈现每封帖子一样,您需要将posts替换为post

<% @posts.each do |post| %>
  <h2><%= link_to post.title, post %></h2>
  <%= link_to image_tag(post.image.thumb('64x64!').url) if post.image_stored? %>
<% end %>