ruby-on-rails 在表单提交时更改标签的值- Ruby on Rails

wz3gfoph  于 2022-11-19  发布在  Ruby
关注(0)|答案(3)|浏览(161)

我正在温习我的轨道。我有一个非常简单的表单。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(根据计算函数)的值?看起来应该很容易,但显然我忘记了表单和表单提交是如何工作的一些基本租户。

ajsxfq5m

ajsxfq5m1#

将render更改为redirect_to并传递如下参数

def calculate
    puts params
    @query = (params[:query].to_i * 2).to_s
    redirect_to index_path(query: @query)
  end
<% unless params[:query].blank? %>
  <p><%=@query%></p>
<% end %>
oalqel3c

oalqel3c2#

查看您的routes文件,您在提交calculate的发布请求时调用index操作,因此它始终从索引方法返回@query值,即biznass
如果要使用参数计算@query,并对定义了相同路由的查询使用索引操作,则必须更新索引方法

def index
  if params[:query]
    puts params
    @query = (params[:query].to_i * 2).to_s 
  else
   @query = 'biznass'
  end

或者您可以更改路由和控制器代码
第一次

webghufk

webghufk3#

我建议在routes.rb中使用resources,而不是像那样做,它将更加简洁,可扩展,您可以使用url帮助方法。您可以在您终端中运行rake routes来查看路由的详细信息,如帮助方法的名称,路径,http动词,以及路径使用的控制器方法。

resources :genalg, controller: :genalg, only: [:index] do
  collection do
    post :calculate
  end
end

def calculate的这个示例中,如果你有一个带有http动词POST的方法,并且它应该以成功状态响应,那么大多数时候你需要重定向它而不是呈现它,因为如果用户在calculate之后刷新或复制url,该页面将不会被发现,因为calculatePOST http动词。所以你必须将render更改为redirect_to并传递参数:query,所以每次用户在计算后刷新页面时,:query将被持久化。即使您希望将:query存储在数据库中,这仍然适用。此外,在这里您可以看到我们使用帮助器方法通过使用genalg_index_path来重定向到索引页

def calculate
  puts params
  query = (params[:query].to_i * 2).to_s
  redirect_to genalg_index_path(query: query)
end

然后在索引中检查params查询是否为空

def index
  @query = params[:query] || 'biznass'
end

正如您所看到的,我们再次使用helper方法来获取计算路径,我们不需要@query条件,因为它从不使用nil

<h1>Genalg#index</h1>
<p>Find me in app/views/genalg/index.html.erb</p>

<%= form_with url: genalg_calculate_path do |form| %>  
  <%= form.text_field :query %>  
  <%= form.submit 'calculate' %>
<% end %>

<p><%=@query%></p>

相关问题