在rails中,当我在each
语句中切换两个变量的顺序时会有什么不同:
flash.each do |name, msg|
content_tag :div, msg, class: "alert alert-info"
#output => "Successfully updated item"
比较:
flash.each do |msg, name|
content_tag :div, msg, class: "alert alert-info"
#output => notice
当然在我的item_controller
我有这个:
def update
if @item.update(item_params)
redirect_to @item, notice: "Successfully updated items"
else
render 'edit'
end
end
答案 0 :(得分:1)
在您的情况下,您正试图从flash var获取信息,其定义如下:
flash = {
notice: "Successfully updated items"
}
每个语句使用键值对来获取和操作哈希值。
flash.each do |key, value|
#doSomething
end
在这种情况下,键是“通知”和值“成功更新项目”。
答案 1 :(得分:0)
在这种情况下,flash
是一个哈希http://docs.ruby-lang.org/en/2.0.0/Hash.html,这意味着keys
和values
就像字典一样存储。您可能习惯使用的常规变量有点不同。为了帮助您获得概念,您可以将哈希内部的键视为子变量。当您使用.each
之类的东西迭代哈希时,您将始终首先获得密钥,然后是值,密钥永远不会是nil
,但值可能是。
示例强>
def update
if @item.update(item_params)
# This line is saying redirect and add a key, value to the
# flash hash, with the key being 'notice' and the 'value'
# "Successfully updated items"
redirect_to @item, notice: "Successfully updated items"
else
render 'edit'
end
end
你问了一个上面的问题,如果你只有一个变量,它是一个键还是一个值。它不会是一个变量。
示例强>
str = 'Hello'
content_tag :div, str, class: "alert alert-info"
#output => "Hello"