我正在重温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表。我很确定不应该这样做但不知何故它可行。它为什么有效?这样做的正确方法是什么? 感谢。
答案 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' } %>