Rails:根据数据库条目决定在视图中渲染特定图像
Posted
技术标签:
【中文标题】Rails:根据数据库条目决定在视图中渲染特定图像【英文标题】:Rails: decide to render spefic image in view based on database entry 【发布时间】:2011-10-24 08:44:02 【问题描述】:我对 Rails 比较陌生,现在正在构建一个演示黑板。
有用户可以回应的主题。发表的意见有投票权:正面、负面或中立。这些由复选框选择。
在主题显示 - 视图中,您可以看到已经发布的意见。对于每个意见,都应该呈现一个拇指向上/向下/中性的图像。
现在,我正在为新的意见表使用 HAML 和 formtastic:
=f.input :vote, :as => :radio, :label => "Your vote", |
:collection => [["positive","/images/Thumbs-up-icon.png"],["negative","/images/Thumbs-down-icon.png"],["neutral","/images/Thumbs-neutral-icon.png"]] |
主题展示的重要部分如下所示:
- @opinions.each do |opinion|
[...]
#opinion_vote
= image_tag opinion.vote , :height=>60
如您所见,对于每个意见,我每次都将三个 image_url 中的一个直接保存在数据库中,并直接使用它们在我的主题视图中呈现图像。
我知道,这在很多层面上都很糟糕,但这是我迄今为止发现的唯一可行的解决方案。 我的想法是将选票保存为整数,例如 1 表示正数,0 表示中立,-1 表示负数。下一步是在我的主题视图中有一个案例来决定应该渲染哪个图像。但是观点的逻辑又不好了……
但是在 Rails 中决定应该显示哪种图像的最佳方式和位置是什么?主题控制器?意见模型?帮手?最后:代码看起来如何;)?
谢谢。
【问题讨论】:
【参考方案1】:您可以在这里使用帮助程序,可能会结合一些模型方法来简化访问数据的过程。
意见模型
def neutral?
if vote == 0
end
def positive?
if vote == 1
end
def negative?
if vote == 2
end
意见助手
def vote_image
vote.positive? ? 'positive.png' : vote.negative? ? 'negative.png' : 'neutral.png'
end
正如您所说,最好将此类内容存储为整数而不是文本,因为它们存储起来更小,对您的数据建立索引更有效。
【讨论】:
谢谢Lloy,成功了!以上是关于Rails:根据数据库条目决定在视图中渲染特定图像的主要内容,如果未能解决你的问题,请参考以下文章