【问题标题】:carrierwave not creating method载波不创建方法
【发布时间】:2015-08-26 21:53:56
【问题描述】:

我正在尝试通过carrierwave将图像上传添加到表单中,并通过图像标签显示图片。

因此我生成了一个图片上传器和一个迁移

$ rails generate uploader Picture
$ rails generate migration add_picture_to_cpostings picture:string

并迁移。

我也加了

mount_uploader :picture, PictureUploader

到 cpostings 模型。

在控制器中我允许了图片属性

def cposting_params
    params.require(:cposting).permit(:content, :spots, :class_date, :class_time, :title, :picture)
end

上传
  <%= f.file_field :picture, accept: 'image/jpeg,image/gif,image/png' %>

在表单中有效,但是当我尝试在帖子中显示图片时

<%= image_tag cposting.picture.url if cposting.picture? %>

我收到以下错误:

# 的未定义局部变量或方法 `cposting'

根据 railstutorial.org,该方法应由carrierwave 自动创建。你知道为什么它在这里不起作用吗?

【问题讨论】:

    标签: ruby-on-rails carrierwave


    【解决方案1】:
    undefined local variable or method `cposting' for #<#:0x007f9629cc76f0>
    

    从错误消息中可以清楚地看出,您的视图没有找到cposting 变量。您必须在相应控制器的操作中将这个 cposting 变量声明为实例变量 (@cposting),然后它将在您的视图文件中可用,并且您不会收到此错误。

    更新

    变化:

    <%= image_tag cposting.picture.url if cposting.picture? %>
    

    收件人:

    <%= image_tag @cposting.picture.url if @cposting.picture? %>
    

    【讨论】:

    • 视图中还生成了类似这样的其他内容:

      并且它有效,因此我认为问题不在于 cposting控制器
    • 是的,因为你有一个@ 在这里唱歌:@cposting.title 所以它可以工作。但是你得到了错误,你只需要:cposting 而不是@cposting。将其更改为 @cposting 并查看它是否有效。
    • 没关系,我忘记了 cposting.picture 中的@?布尔值,现在可以了。非常感谢朋友
    • @moneymakesadifference 很高兴它帮助了您并为您工作。请接受我的回答,因为它对您有帮助。要了解接受答案的工作原理,请参阅此处:meta.stackexchange.com/questions/5234/…Thanks。
    猜你喜欢
    • 2010-09-17
    • 2018-09-19
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多