无法正确传递模板中的参数

时间:2016-04-01 10:48:27

标签: elixir phoenix-framework

我在“web / templates / module / headerHC.html.eex”中有这个:

   <%= for element <- MyProject.PageView.Recursion.buildElements(@header_linkNumber),1) do %>
            <%= element %>
   <% end %>

然后,我在“web / layout / HC.html.eex”中使用此组件:

<%= render FabricaASA.ModuleView, "headerHC.html", conn: @conn,
    header_class: nil,
    header_linkNumber: "3"
%>

最后我在“web / views / page_view.ex”中定义了:

defmodule Recursion do
        def buildElements(n) when n <= 1 do
            [n]
        end
        def buildElements(n) do
            [n | buildElements(n - 1)]
        end
    end

问题是我收到了这个错误:

bad argument in arithmetic expression指向这一行:

def buildElements(n) when n <= 1 do

当我插入@header_linkNumber而非<%= for element <- MyProject.PageView.Recursion.buildElements(2),1) do %>

之类的数字时会发生这种情况

我已经尝试使用@MyProject.ModuleView.header_linkNumber,但后来我收到了这个错误:

cannot set attribute @__aliases__ inside function/macro

1 个答案:

答案 0 :(得分:1)

当您从字符串中减去一个整数时,您将获得“算术表达式中的错误参数”:

*{
    margin:0; 
    padding:0;
 }

变化:

iex> "3" - 1 
** (ArithmeticError) bad argument in arithmetic expression
    :erlang.-("3", 1)

要:

header_linkNumber: "3"

作为一个有趣的旁注,您实际上可以将字符串与整数进行比较:

header_linkNumber: 2

你应该知道这一点,因为如果你在其他地方使用字符串而不是整数,它可能会导致意外错误。

订单(来自http://elixir-lang.org/getting-started/basic-operators.html)是:

  

数字&lt;原子&lt;参考&lt;功能&lt;港口&lt; pid&lt;元组&lt;地图&lt;列表&lt;位串