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:根据数据库条目决定在视图中渲染特定图像的主要内容,如果未能解决你的问题,请参考以下文章

从rails中的控制器渲染部分

如何根据点击的特定链接呈现部分内容?

Ruby on Rails 6 - 如何根据特定路线建模/隐藏视图?

Rails 单选按钮:根据模型/数据库条目设置默认值

Rails 渲染模板

Rails - 如何在索引控制器方法中使用额外字段渲染json