Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby form_如何在rails中生成路径?_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby form_如何在rails中生成路径?

Ruby form_如何在rails中生成路径?,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,有谁能解释一下如何使用表单u为生成路径?。下面的代码生成一个路径文章注释路径 <%= form_for [@article, @comment] do |f| %> <% end %> 我的意思是它如何准确地生成文章注释路径而不是文章注释路径它使用多态路径方法来确定路径。这是一篇关于多态url的基本论文: 更新: polymorphic\u path正在内部使用名为build\u named\u route\u call的方法。当它得到一个数组时,它会从数组

有谁能解释一下如何使用
表单u为
生成
路径?。下面的代码生成一个路径文章注释路径

<%= form_for [@article, @comment] do |f| %>    
<% end %>


我的意思是它如何准确地生成
文章注释路径
而不是
文章注释路径
它使用
多态路径
方法来确定路径。这是一篇关于多态url的基本论文:

更新:

polymorphic\u path
正在内部使用名为
build\u named\u route\u call的方法。当它得到一个数组时,它会从数组中取出最后一条记录(使用
pop
),然后迭代剩余的数组,将所有对象更改为

  • 如果它是一个模型,它会接受它的类并调用'model\u name.singular\u route\u key'
  • 如果是符号或字符串,则保持原样
  • 然后剩下最后一个元素。它可以是单数也可以是复数,这可以通过下面的case语句在
    polymorphic_url
    方法中解决:

    inflection = if options[:action] && options[:action].to_s == "new"
          args.pop
          :singular
        elsif (record.respond_to?(:persisted?) && !record.persisted?)
          args.pop
          :plural
        elsif record.is_a?(Class)
          args.pop
          :plural
        else
          :singular
        end
    

    其中记录是数组的第一个元素(如果传递了数组)
    inlink
    var然后被传递到
    build\u named\u route\u call
    以便它可以生成正确的助手名称。正如您所看到的,此表单将根据第一个元素是否已持久化而生成不同的路径。

    您将在数组中向其传递单个文章和注释。类型是用来决定做什么的一种方式。你怎么说,我只传递一篇文章。生成/articles-then/article-right。是的,因为你不再传递数组,你传递的是一个特定类的对象。这整个魔法是如何工作的或如何生成的,任何与此相关的文章都可以深入研究。@Shane-没有比源代码本身更好的文章了。另外,阅读它可能是深入学习rails的最佳方式。我的意思是,它如何准确地生成文章注释路径而不是文章注释路径谢谢,如果可能的话,你能帮我解决这个问题吗。