我正在构建一个Rails应用,用户可以在其中输入关于自己的六个单词并上传图像。我想在图像上附加这六个词。

我知道如何使用“静态”文本来添加文本,但我不知道如何将文本字段链接到用户输入六个单词时填写的表单。

现在,“文字”是静态的,无论我放置什么。

我想知道为什么下面的方法不起作用?

process :textify => <%= @user.sixwords %>


这是我所拥有的:

process :textify => 'Text'

  def textify(phrase)
    manipulate! do |img|
    img = img.sepiatone

  title = Magick::Draw.new

  title.annotate(img, 0,0,0,40, phrase) {
    self.font_family = 'Helvetica'
    self.fill = 'white'
    self.pointsize = 32
  }

  img = img.write('newimg.gif')
 end
end


感谢您帮助我减少n00b的使用! :)

最佳答案

在朋友的帮助下解决了这个问题。

这就是我需要更改的所有内容:

title.annotate(img, 0,0,0,40, model.name) {
    self.font_family = 'Helvetica'
    self.fill = 'white'
    self.pointsize = 32
  }


之所以有效,是因为Carrierwave使用model作为变量,该变量指向上传者附加到的任何实例对象。在我的模型中,name是接受用户文本输入的表单字段的名称。

对于其他用例,只需将model.field_name放在您为field_name指定的任何名称上。

我的朋友是这样写的,向我解释。我将其粘贴在这里,以防它可以帮助其他人。


ImageUploader中的'process'方法是静态类方法,
仅在文件加载到内存中时调用一次,并且
由红宝石解释。基本上只是内部跟踪
以后应为每个实例调用哪种处理方法
ImageUploader。 textify方法是获取的实例方法
在创建的每个ImageUploader对象实例上调用。的
您在运动员模型中调用的“ mount_uploader”类方法是
做一些红宝石魔术来实例化ImageUploader实例,并
将运动员实例对象传递给它,使其可供
ImageUploader对象实例作为称为“模型”的实例方法。

09-30 00:08