为什么每个语句中的变量顺序会影响输出?

时间:2015-11-14 16:04:03

标签: ruby-on-rails ruby haml

在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

2 个答案:

答案 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,这意味着keysvalues就像字典一样存储。您可能习惯使用的常规变量有点不同。为了帮助您获得概念,您可以将哈希内部的键视为子变量。当您使用.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"