(简单)Ror:在视图中创建助手。但是怎么做?

Posted

技术标签:

【中文标题】(简单)Ror:在视图中创建助手。但是怎么做?【英文标题】:(easy) Ror : Create helper in view. But how? 【发布时间】:2011-07-05 12:40:28 【问题描述】:

我正在发现 Rails,并且我确信做我想做的事情的方法不是我在这里所做的。 你能告诉我如何正确地做到这一点吗??

我想创建一个助手并使用我的“标志”变量来查看我可以使用哪个背景。

这是我想要的行为: - 如果我在 /groups/:id ,我想显示背景 :id.jpg 如果它存在 - 如果没有,我想显示一个由我的 javascript ImagesAleatoire() 给出的随机图像;

感谢您的帮助

<% flag = false
if (params[:id]) and (request.request_uri[1..7] == "groups/")
    file =  "/images/groups/"+params[:id]+".jpg";
else
    file = ""
end


if (File.exists?("public"+file)) %>
    <% flag = true %>
    <div id="header" style="background : url('<%= file %>') 114px top #2d8872;">
<% else %>
    <div id="header" style="background-color : #2d8872;">
<% end %>


<div id="searchzone">

    <div id="personnage">
    <% unless (flag)    %> <script>Images_Aleatoire(); </script> <% end %>
    </div> 
</div>
...

【问题讨论】:

【参考方案1】:

app/helpers/下这样的助手:

module FlagHelper
  def flag_exists?
    flag_file && File.exists?("public"+flag_file)
  end

  def flag_file
    "/images/groups/"+params[:id]+".jpg" if params[:id]
  end
end

在你看来:

<% if (flag_exists?) %>
    <div id="header" style="background : url('<%= flag_file %>') 114px top #2d8872;">
<% else %>
    <div id="header" style="background-color : #2d8872;">
<% end %>


<div id="searchzone">
  <div id="personnage">
    <% unless (flag_exists?) %>
      <script>Images_Aleatoire();</script>
    <% end %>
  </div> 
</div>

【讨论】:

【参考方案2】:

你可以试试这个辅助函数

def group_bg_picture
  if (params[:controller] == "groups") && (params[:id])
    file = "/images/groups/#params[:id].jpg";     
    "background:url('#file') 114px top #2d8872;" if File.exists? "public"+file 
  else
    ""
  end
end

在你看来:

<% bg_picture = group_bg_picture %>
<div id="header" style="<%= bg_picture || 'background-color : #2d8872;' %>">
<% unless (bg_picture.present?) %> 
  <script>Images_Aleatoire(); </script> 
<% end %>

【讨论】:

以上是关于(简单)Ror:在视图中创建助手。但是怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Rails 视图助手提取到 gem 中?

ROR 3 - 指定特定视图文件,忽略应用程序布局

ROR:嵌套视图

视图如何知道 RoR 中的自己的 url [重复]

ruby 助手围绕关联创建视图文本

如何在控制器或视图之外使用 Zend Framework 部分视图助手?