我已经将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>
答案 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 %>