Elixir 如何连接两个名称以创建一个函数名
在我的模板中,我尝试动态定义其中的路径帮助器:Elixir 如何连接两个名称以创建一个函数名,elixir,phoenix-framework,Elixir,Phoenix Framework,在我的模板中,我尝试动态定义其中的路径帮助器: <%= link "Edit", to: @options[:resource]_path(@options[:conn], :edit, @options[:resource]) %> 因此,我想使用@options[:resource]预先添加资源名称并创建正确的路径帮助器,如:post\u path(@conn,:edit,post) 因为这是一个函数名而不是字符串,所以我尝试过的所有方法({},++)都不起作用。因为您想动
<%= link "Edit", to: @options[:resource]_path(@options[:conn], :edit, @options[:resource]) %>
因此,我想使用@options[:resource]
预先添加资源名称并创建正确的路径帮助器,如:post\u path(@conn,:edit,post)
因为这是一个函数名而不是字符串,所以我尝试过的所有方法(
{},++
)都不起作用。因为您想动态调用函数,这里应该有帮助:
<%= link "Edit", to: apply(
__MODULE__,
:"#{@options[:resource]}_path",
[@options[:conn], :edit, @options[:resource]]
) %>
选项[:resource]的值是多少?它是字符串、原子还是结构?嗯……我只是传递post
,而不是字符串、原子或结构……您可以为调用此模板的控制器操作添加代码吗?在您第一次评论之后,我才意识到,如果改为使用字符串,并在处理此模板的方式中更改一些逻辑,会容易得多。谢谢。apply/2
仅适用于匿名函数。另外,我不认为@options[:resource]
是字符串或原子,或者apply/3
可以使用MyApp.Router
作为第一个参数。事实上,谢谢,这里已经提到了apply/3
。OP表示,预期结果是“类似于post_path(…
”,这就是为什么我希望那里有一个字符串/原子。在任何情况下,这个字符串/原子都应该可以从@options[:resource]
中轻松检索。