Rails:为div编写函数

时间:2016-04-18 04:03:58

标签: ruby-on-rails function

嘿,我对Rails很陌生而且我有点陷入困境所以我在轨道上有这个div,我一遍又一遍地使用它来显示图标。我想写一个函数,因为有大约20个图像和3个不同的状态(非活动/活动/完成)

我的观点

 <div class="position6">
   <%= link_to "course_6" do %>
   <%= image_tag '/icons/course_6_active.png', width: 150, height: 150, alt: ''%>
   <%end%>
</div>

控制器

def iconloader(number,state)
 <div class="position#{number}">
 <%= link_to "course_#{number}" do %>
 <%= image_tag '/icons/course_#{number}_#{state}.png', width: 150, height: 150, alt: ''%>
 <%end%>
end

我似乎无法弄清楚如何为div编写一个函数。(我知道它应该很容易,但我已经被困了2天了)我有点迷茫。另外我在哪里放功能?在控制器或视图中?

更清楚地重新解释我的问题:在使用rails的视图中,如何使用更少的代码来实现相同的目标?现在有点乱。

2 个答案:

答案 0 :(得分:2)

我认为你正在寻找的是一个助手

http://www.rails-dev.com/custom-view-helpers-in-rails-4

答案 1 :(得分:2)

首先,如果您想要一个在视图中呈现简单HTML的函数,请使用辅助函数。这些都在app/helpers中。在application_helper.rb中放置方法可以在视图中的任何位置调用。

至于在Ruby中呈现HTML,您可以使用以下语法:

在application.rb中:

def iconloader(number, state)
  content_tag(:div, class: "position6") do
    link_to "course_6" do
      image_tag '/icons/course_6_active.png', width: 150, height: 150, alt: ''
    end
  end
end

然后,只需在视图中调用图标加载器:

<%= iconloader(number, state) %>

另外,我考虑在可能的情况下使用部分代替函数来呈现HTML。在HTML本身而不是Ruby中表达HTML通常更容易,尤其是对于更复杂的HTML。