Ruby 比较Mustache块循环中数组的值

Ruby 比较Mustache块循环中数组的值,ruby,arrays,sinatra,mustache,Ruby,Arrays,Sinatra,Mustache,因此,我尝试使用Mustache和Sinatra从数组中渲染一个select下拉列表。模板代码当前如下所示: <select id="phone_prefix" name="phone_prefix"> {{#prefixes}} <option value="{{to_s}}" {{selected}}>{{to_s}}</option> {{/prefixes}} </select> 对于mustache模板中

因此,我尝试使用Mustache和Sinatra从数组中渲染一个select下拉列表。模板代码当前如下所示:

<select id="phone_prefix" name="phone_prefix">
    {{#prefixes}}
        <option value="{{to_s}}" {{selected}}>{{to_s}}</option>
    {{/prefixes}}
</select>
对于mustache模板中的{selected}}值,我需要对当前正在迭代的数组项和通过params[:phone_prefix]传入的查询字符串值进行比较,例如09。然后,当存在匹配时,将selected的值返回给要传递给mustach的选定方法


任何帮助都将不胜感激。

将逻辑推送到您的Ruby中,只需将数据馈送到Mustach即可。更新prefixes方法以返回哈希数组:

def prefixes
  # figure out which one is selected by asking params...
  [ { :n => '03', :selected => false }, { :n => '04', :selected => true }, ... ]
end
然后在您的模板中执行类似的操作:

<select id="phone_prefix" name="phone_prefix">
    {{#prefixes}}
        <option value="{{n}}" {{#selected}}selected="selected"{{/selected}}>{{n}}</option>
    {{/prefixes}}
</select>
我只在JavaScript中使用了Mustache,所以我可能在Ruby风格中缺少了一些东西,但是类似的东西应该可以工作,您只需要将params中的信息输入到prefixes方法中

小胡子是刻意简约的,没有逻辑性:

无逻辑模板


所以所有的逻辑都在代码中,您只需为Mustach设置一组变量和标志即可。模板中唯一可用的逻辑是这是真的吗?我能重复一下吗?;任何比这更复杂的东西都必须放在为小胡子准备数据的代码中。

Rad!谢谢那真是一种享受。我最后使用了以下前缀方法,效果非常好:

def prefixes
  prefix_list = [{:n => "03", :selected => false}, {:n => "04", :selected => false}, {:n => "06", :selected => false}, {:n => "07", :selected => false}, {:n => "09", :selected => false}, {:n => "021", :selected => false}, {:n => "022", :selected => false}, {:n => "025", :selected => false}, {:n => "027", :selected => false}, {:n => "028", :selected => false}, {:n => "029", :selected => false}]
  prefix_list.each do |i|
    if i[:n] == "09"
      i[:selected] = true
    end
  end
  prefix_list
end
def prefixes
  prefix_list = [{:n => "03", :selected => false}, {:n => "04", :selected => false}, {:n => "06", :selected => false}, {:n => "07", :selected => false}, {:n => "09", :selected => false}, {:n => "021", :selected => false}, {:n => "022", :selected => false}, {:n => "025", :selected => false}, {:n => "027", :selected => false}, {:n => "028", :selected => false}, {:n => "029", :selected => false}]
  prefix_list.each do |i|
    if i[:n] == "09"
      i[:selected] = true
    end
  end
  prefix_list
end