根据Ruby中的db值选择下拉列表中的值

时间:2012-09-13 17:16:01

标签: jquery ruby-on-rails ruby sinatra

我有一个简单的Sinatra应用程序,您可以用它来记录您在某个夜晚喝的啤酒,它们的数量和类型。要编辑其中一个用户输入的夜晚,我有一个简单的表格,它反映了创建饮酒活动时输入的值:

<input type="text" value="<%= @beer.name %>" name="name"/>
<input type="text" value="<%= @beer.price %>" name="price"/>

因此,从数据库值填充值非常好。现在,如何选择下拉值?

<select name="night">
    <option value="Monday">Monday</option>
    <option value="Tuesday">Tuesday</option>
    <option value="Wednesday">Wednesday</option>
    <option value="Thursday">Thursday</option>
    <option value="Friday">Friday</option>
    <option value="Saturday">Saturday</option>
    <option value="Sunday">Sunday</option>
  </select> 

我发现我可以使用内联jquery来实现它:

<script>
$(document).ready(function(){
$(".edit select[name=type] option").each(function(){
if ($(this).val() == "<%= @beer.type %>"){
  $(this).attr("selected", true );
}
});
$(".edit select[name=night] option").each(function(){
if ($(this).val() == "<%= @beer.night %>"){
  $(this).attr("selected", true );
}
});
});
</script> 

但我真的不想诉诸内联js。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我会做这样的事情

<select name="night">
  <% ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"].each do |day| %>
    <option <%= 'selected="selected"' if day == @beer.night %> value="<%= day %>"><%= day %></option>
  <% end %>
</select>

答案 1 :(得分:0)

您可能希望从选择下拉框的简单ID选择器开始,如下所示:

<select id="day">...</select>

Then create an external javascript file, call it whatever you like such as day_select_handler.js  and include it in your view.

<html>
<head>
  <script type="text/javascript" src="day_select_handler.js"></script>
</head>
...

这样,加载此页面时将加载javascript文件。 它不是内联的,也可以在其他页面中重复使用。