Ruby 循环无法正常工作
Ruby Loops not working properly
我最近问了一个问题,关于在 rails 形式的单选按钮或复选框的标签中使用散列中的一些值,而不是在标签中进行硬编码:。我试图通过创建一个辅助方法来解决这个问题,该方法接受散列(基本上是我数据库中的 table )并将所需的参数映射到一个数组但循环遍历该数组;虽然使用参数作为标签没有产生预期的结果,但它输出迭代器的值而不是输出我编写的代码行的结果。下面是我的辅助方法。
def sport_select(sport)
x = Sport.all.map {|e| e.sport_name}
for i in 1..x.length
check_box_tag(x[i], checked_value = 1, unchecked_value = 0)
end
end
行 x = Sport.all.map {|e| e.sport_name}
产生 ["sport_name", "sport_name"]
;但是 for 循环只显示 1..2
。我曾尝试将 x = Sport.all.map {|e| e.sport_name}
更改为 x = Sport.all.map {|e| [e.id, e.sport_name]}
以将其用作散列,从而生成 [[id, "sport_name"],[id, "sport_name"]]
但我在使用 id
作为散列的键时遇到了问题。任何帮助将不胜感激。谢谢。
这应该将所有运动记录显示为单选按钮:
def sports_as_radio_buttons(sports = Sport.scoped)
html = "".html_safe
sports.each do |sport|
html += radio_button_tag('sport_id', sport.id, id: "sport_#{sport.id}")
html += label_tag("sport_#{sport.id}", sport.name)
end
html
end
希望对您有所帮助!
这不正常:
check_box_tag(x[i], checked_value = 1, unchecked_value = 0)
方法定义为:
check_box_tag(name, value = "1", checked = false, options = {})
您为 value
传递 1,为 checked
传递 0。您不能使用 variable = value
和 "name" 参数,您所做的只是设置一个变量,然后将相同的值传递给该方法。
如果你想生成一个复选框,其中名称是运动的名称,它的值是运动的 id,去掉你的一对循环,只使用一个 single循环:
def sport_select(sport)
Sport.all.map do |e|
check_box_tag(e.sport_name, e.id)
end
end
如果您要将结果输出到页面,您可能还想使用 .join('').html_safe
到 return 单个字符串,并防止它被转义。
我最近问了一个问题,关于在 rails 形式的单选按钮或复选框的标签中使用散列中的一些值,而不是在标签中进行硬编码:
def sport_select(sport)
x = Sport.all.map {|e| e.sport_name}
for i in 1..x.length
check_box_tag(x[i], checked_value = 1, unchecked_value = 0)
end
end
行 x = Sport.all.map {|e| e.sport_name}
产生 ["sport_name", "sport_name"]
;但是 for 循环只显示 1..2
。我曾尝试将 x = Sport.all.map {|e| e.sport_name}
更改为 x = Sport.all.map {|e| [e.id, e.sport_name]}
以将其用作散列,从而生成 [[id, "sport_name"],[id, "sport_name"]]
但我在使用 id
作为散列的键时遇到了问题。任何帮助将不胜感激。谢谢。
这应该将所有运动记录显示为单选按钮:
def sports_as_radio_buttons(sports = Sport.scoped)
html = "".html_safe
sports.each do |sport|
html += radio_button_tag('sport_id', sport.id, id: "sport_#{sport.id}")
html += label_tag("sport_#{sport.id}", sport.name)
end
html
end
希望对您有所帮助!
这不正常:
check_box_tag(x[i], checked_value = 1, unchecked_value = 0)
方法定义为:
check_box_tag(name, value = "1", checked = false, options = {})
您为 value
传递 1,为 checked
传递 0。您不能使用 variable = value
和 "name" 参数,您所做的只是设置一个变量,然后将相同的值传递给该方法。
如果你想生成一个复选框,其中名称是运动的名称,它的值是运动的 id,去掉你的一对循环,只使用一个 single循环:
def sport_select(sport)
Sport.all.map do |e|
check_box_tag(e.sport_name, e.id)
end
end
如果您要将结果输出到页面,您可能还想使用 .join('').html_safe
到 return 单个字符串,并防止它被转义。