可以在Ruby on Rails的视图模板中从数据库中读取日期吗?

时间:2016-07-28 23:20:44

标签: ruby-on-rails ruby

我正在重温MVC和Ruby on Rails的基础知识。我正在查看我的代码,发现我在编辑用户配置文件视图中使用了此选择标记。

<ul class="textinput reason gridA">
  <li><p class="feedback"><label><input runat="server" type="radio" name="feedbackreason[]" aria-label="What would you like to tell us about?" aria-valuetext="Your Baptist Health experience" title="What would you like to tell us about?: Your Baptist Health experience" id="bhexperience"  class="feedbackreason reqType" value="bd" clientidmode="Static" /> Your Baptist Health experience</label></p></li>
  <li class="block panel-content marginT20">
      <div class="hidePanel" style="display:none">
      <p class="hl4">To enable us to respond to your comments, would you please let us know who to contact?</p>
      <p class="marginT10 marginL10"><label for="feedbackName" class="alignL">Name:</label><input type="text" name="feedbackName" id="feedbackName" class="text feedbackName marginL5" title="feedback Name" /><br />
      <br />
      <label for="contactInfo" class="alignL">Contact Information:</label><input type="text" name="contactInfo" id="contactInfo" class="text contactInfo marginL5" title="Contact Information" /></p>
      <p class="hl4 marginT10">For immediate patient portal service, please call
      <br />
      <strong><a class="phoneCall" style="color: mediumvioletred" href="tel:18446220622">1.844.622.0622</a></strong> (toll-free, 24/7)</p>       
      </div>
  </li>
</ul>

我正在访问视图中的Country表。我很确定不应该这样做但不知何故它可行。它为什么有效?这样做的正确方法是什么? 感谢。

3 个答案:

答案 0 :(得分:1)

没有理由为什么你赢得了什么工作。请记住,视图模板是一个&#34;嵌入式ruby&#34;文件。它嵌入了HTML模板中的Ruby。当视图被渲染时#34;通过控制器,其中的所有代码都被执行,并且其Ruby代码生成的任何输出都成为HTMl文档的一部分。在这种情况下,Ruby代码生成的输出是一堆HTML标记和国家/地区名称和ID。

为了避免在视图中使用此逻辑,您可以将其放在控制器中并将其保存到实例变量(例如@select_vals),然后在视图模板中引用该变量。

答案 1 :(得分:1)

这很有效,因为Rails提供了很多魔法。引擎盖下;据猜测,这个功能可能是ActionView库的一部分(我还没有检查过)。

MVC模型的基本原则之一是您不在视图中执行此操作。这个逻辑应该在控制器中完成。

答案 2 :(得分:1)

正确的方法 - &gt;

在Controller方法中:

@country_vals = Country.order(:name).pluck(:name, :id)

无需使用collect()。

在您看来:

<%= f.select :country_id, @country_vals, {}, { :class => 'form-control' } %>