form_for如何在rails中生成路径?

时间:2014-05-29 10:24:18

标签: ruby ruby-on-rails-4

有人可以解释我如何使用paths生成form_for吗?以下代码生成路径article_comments_path。

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

我的意思是它如何完全生成article_comments_path而不是articles_comment_path

1 个答案:

答案 0 :(得分:1)

使用polymorphic_path方法确定路径。它基本上是围绕polymorphic_urlhttp://apidock.com/rails/v4.0.2/ActionDispatch/Routing/PolymorphicRoutes/polymorphic_url

的文书

更新

polymorphic_path正在使用名为build_named_route_call的内部方法。当它获得一个数组时,它会从数组中取出最后一条记录(使用pop),然后迭代剩余的数组,将所有对象更改为

  1. 如果它是一个模型,它需要它并调用`model_name.singular_route_key&#39;
  2. 如果是符号或字符串,则将其保留原样
  3. 然后我们留下了最后一个元素。它可以是单数或复数,这可以通过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
    

    其中record是数组的第一个元素(如果传递了数组)。然后将inlection var传递给build_named_route_call,以便它可以构建正确的帮助程序名称。如您所见,此表单将生成不同的路径,具体取决于第一个元素是否已经保留。