上传图片不使用erb(form)rails

时间:2014-06-23 16:16:58

标签: html ruby-on-rails ruby

我想知道是否有办法在不使用erb的rails 4中上传图像。我的模型中的引号中有我的html代码(因此我可以在创建页面时将其用作默认值)。所以我不能把erb放在引号中,因为如果我这样做,那么它将作为erb代码而不是实际视图出现。 (即上传图像形式。它将作为实际的f.image_tag而不是实际的上传按钮出现)。

所以我只是看看是否有另一种方法可以将图像上传到不需要erb的报价中。但是,使用Rails 4。

1 个答案:

答案 0 :(得分:0)

如果您在字符串中包含纯HTML代码,并且只是想要显示它,则需要在视图中调用.html_safe,例如:

'<div id="foo">bar</div>'.html_safe()

请注意,这通常是一种不好的做法:这并不意味着它总是很糟糕,但这意味着它始终是一个关注点,以确保它是最好的方法。

如果您想在不使用form.image_tag的情况下进行图片上传,只需将其放在视图中,然后查看生成的代码(Chrome中的Ctrl+U),在这种情况下,它将类似于:

<input type="file" id="something" />

并将其添加到字符串中。可能通过JS添加了一些更精细的验证和选项,添加这种方式会很麻烦 - 一种方法是使用代码向html添加脚本标记。

但是,如果你的字符串已经包含这样的代码,并且你要求它不起作用,那么你需要向调用者添加一个eval,例如:

eval('form.image_tag :image')

并不是说这是一种更糟糕的气味,应该不惜一切代价避免它。

也许最好在你的section.rb模型中添加一些标志,然后在帮助器中或在视图中使用它来渲染html;例如,一个has_upload?字段,然后你可以做这样的事情:

if @section.has_upload?
  form.image_tag :imagem
end