我正在温习我的轨道。我有一个非常简单的表单。views -〉genalg -〉index.html.erb
<h1>Genalg#index</h1>
<p>Find me in app/views/genalg/index.html.erb</p>
<%= form_with url: "/calculate" do |form| %>
<%= form.text_field :query %>
<%= form.submit "calculate" %>
<% end %>
<% unless @query.nil? %>
<p><%=@query%></p>
<% end %>
我在controllers -〉genalg_controller.rb下有一个控制器
class GenalgController < ApplicationController
def index
@query = "biznass"
end
def calculate
puts params
@query = (params[:query].to_i * 2).to_s
render :index
end
end
在路由.rb中:
Rails.application.routes.draw do
get 'genalg/index'
post '/calculate', to: 'genalg#index' , as: 'index'
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
当我填充from text:query并点击submit时,我如何才能让视图最后的文本显示我放入times 2(根据计算函数)的值?看起来应该很容易,但显然我忘记了表单和表单提交是如何工作的一些基本租户。
3条答案
按热度按时间ajsxfq5m1#
将render更改为redirect_to并传递如下参数
oalqel3c2#
查看您的routes文件,您在提交
calculate
的发布请求时调用index
操作,因此它始终从索引方法返回@query值,即biznass
如果要使用参数计算@query,并对定义了相同路由的查询使用索引操作,则必须更新索引方法
或者您可以更改路由和控制器代码
第一次
webghufk3#
我建议在routes.rb中使用
resources
,而不是像那样做,它将更加简洁,可扩展,您可以使用url帮助方法。您可以在您终端中运行rake routes
来查看路由的详细信息,如帮助方法的名称,路径,http动词,以及路径使用的控制器方法。在
def calculate
的这个示例中,如果你有一个带有http动词POST
的方法,并且它应该以成功状态响应,那么大多数时候你需要重定向它而不是呈现它,因为如果用户在calculate
之后刷新或复制url,该页面将不会被发现,因为calculate
有POST
http动词。所以你必须将render
更改为redirect_to
并传递参数:query
,所以每次用户在计算后刷新页面时,:query
将被持久化。即使您希望将:query
存储在数据库中,这仍然适用。此外,在这里您可以看到我们使用帮助器方法通过使用genalg_index_path
来重定向到索引页然后在索引中检查params查询是否为空
正如您所看到的,我们再次使用helper方法来获取计算路径,我们不需要
@query
条件,因为它从不使用nil