Rails& Carrierwave:如何在不同的控制器中输出img_tag?

时间:2015-12-10 23:15:08

标签: ruby-on-rails image carrierwave

我想知道如何在外部控制器/视图上输出img_tag。我在Rails中生成了Carrierwave上传器并将其安装到特定型号上。现在我想在不同控制器的视图中访问上传的图像。我得到的是像/images/%23%3CImage::ActiveRecord_Relation:0x00000004a503a8%3E这样的输出。

在Image模型中,使用

安装上传器
mount_uploader :image, ImageUploader

我尝试获取img_path或创建img_tag,但我不会得到有效的结果。例如,我这样做:

<div class="parallax-container">
  <% @image = Image.where(category: 'Parallax', id: :id) %>
  <div class="parallax"><%= image_path(@image) %></div>
</div>

debug params输出显示我的控制器为games,例如特定页面上的id:为1。因此,即使我更改了where hash并告诉它使用id: '1',我也无法获得正确的图像路径。

如果我改为使用<%= image_tag(@image) %>,则会为SRC和ALT参数创建相同的ActiveRecord-Relation-Output。

当我尝试使用<%= image_tag @image.img_url %>时,我被告知img_url是一种未定义的方法。

游戏和图像以这种方式相关,游戏中有许多图像,而图像属于游戏。

我还尝试将一个实例变量添加到游戏节目控制器中,但它不会改变结果。

1 个答案:

答案 0 :(得分:0)

where方法返回记录数组ActiveRecord_Relation。如果您拥有所需记录的id,则应使用find方法。

<% @image = Image.where(category: 'Parallax').find(id_of_the_record) %>

此外,您可以使用相同的find方法按类别查找图像:

<% @image = Image.find_by(category: 'Parallax') %>