gpt4 book ai didi

html - rails form_tag _path 参数

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:05 24 4
gpt4 key购买 nike

虽然问题在“Passing Multiple Parameters in a form_tag” ' 提供了一些关于如何在 form_tag 中传递参数的信息,张贴者最终决定采用不同的方法来实现上述目的(特别是使用隐藏的表单字段)。

当尝试在如下 View 中使用一行代码时:

form_tag(movies_path({:foo = "bar"}), {:id => "ratings_form", :method => :get}) do

似乎 RoR 不会使“foo”的值对 Controller 可用;在这种情况下,是否应该使用另一种语法将参数作为路径的一部分传递?

如果希望将参数作为 URL 的一部分传递,人们会认为这种方法是正确的(而且,事实上,生成的 HTML 表明了这一点,因为生成的 <form> 标记包含一个 action="/movies?foo=bar" 语句) ... 但 Controller 评估 params[:foo]作为''而不是 bar ?)

最佳答案

我认为这里有两个基本问题在起作用......

首先是实参传递自身。 The specification指定使用 GET 方法将表单数据集附加到 URI,使用 POST 方法,将表单数据集包含在表单主体中。提交表单会从表单字段生成参数,即使它是一个 GET 请求(如您指定的那样)并且已指定 URL 参数(指定的 URL 参数不是 URI 的一部分)。除非你想要“可链接”状态,比如搜索表单,否则最好坚持使用 POST 提交表单。

在我看来,第二个问题相当普遍。 Rails routing system对于很多人来说,起初很难理解。接下来,我将假设 movies_path 来自 routes.rb 文件中相应的 resources :movies 行。如果是这样,则路由未设置为在 URL 中传递信息,该 URL 将是 /movies。还将有一个 movie_path 设置为通过 URL 将信息传递给 Controller ​​。一个常见的用法是使用资源正在建模的对象类型的实例作为参数,例如 movie_path(@movie)。这种类型的用法将在传入的对象上运行 to_params,默认情况下返回对象的 id(但可以很容易地覆盖)。这导致 params[:id] 在 Controller 中可用。如果您只想发送不受资源支持的任意信息作为 URL 的一部分,以便在 Controller 中可用,您可能只想定义一个自定义路由来执行此操作,如下所示:

match '/movies/:foo' => 'movies#index', :as => :movies

这将使 Controller 中的 params[:foo] == 'bar' 像这样使用时:

movies_path('bar')

无论如何,希望这对您有所帮助,祝您好运。

关于html - rails form_tag _path 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13262123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com