在rails上的ruby中表单,在一个表单之间传递变量

Eri*_*ika 3 forms ruby-on-rails

我试图在表单之间传递变量,不幸的是我不管理

在我的index.html.erb,我有一个名为的文本字段SearchInput,我想将此变量传递给下一个表单,search.html.erb以便我可以相应地填充一些数据.我该怎么办呢?

在我的index.html.erb我有以下 <% form_tag (:action => 'search') do %>

我真的很擅长如何解决这个问题,任何提示都会非常感激

EmF*_*mFi 29

听起来你可以从像Rails这样的MVC框架中读取模型,视图和控制器之间的交互中获益.我建议使用官方入门指南

以下是与您的问题相关的相关详细信息:

当收到HTTP请求时,Rails会根据url路径将请求路由到控制器操作.控制器通过在请求的上下文中评估视图模板来构建适当的响应.Rails中的标准流程是控制器将从params哈希中提取信息,以查询数据库以获取构建视图所需的信息.在此操作期间,控制器中设置的实例值(名称以"@"开头的变量)将可用于此控制器呈现的视图.

通常,表单指示客户端的Web浏览器在单击提交按钮时向指定的URL发送POST请求.此请求包含表单的字段及其值作为标头中的数据.

Rails解释了params哈希中的表单数据和任何其他参数.您可以在控制器中访问或查看任何操作.访问params散列的普遍接受的位置是在控制器中.

让我们来看看实际发生的过程.以下是在开发中运行服务器时假设我们正在谈论产品的控制器,并且您已正确设置路由.

  1. 用户在其地址栏中输入http:// localhost:3000/products以发起GET请求.

  2. Rails将此请求路由到产品控制器的索引操作.

  3. Rails将执行ProductsController #index(位于app/controllers/products_controller.rb中的索引方法)

  4. 除非您明确呈现或重定向请求,否则Rails将呈现产品/索引模板(app/views/products/index.html.erb),其中包含一个提交到ProductsController搜索操作的小表单.表单代码如下所示:

    <% form_tag(:action => 'search') do %>
      <%= text_field_tag "SearchInput" %>
      <%= submit_tag %>
    <% end %>
    
    Run Code Online (Sandbox Code Playgroud)
  5. 用户填写SearchInput字段并将表单作为POST请求提交到http:// localhost:3000/products/search

  6. Rails将此请求路由到产品控制器的搜索操作.

  7. Rails执行ProductsController #search,params hash包含用户使用SearchInput键输入SearchInput字段的值.这是使用表单输入执行搜索的一个非常简单的示例.

    def search
      @products = Product.find_by_name(params["SearchInput"])
    end
    
    Run Code Online (Sandbox Code Playgroud)
  8. 除非您明确呈现或重定向请求,否则Rails将呈现产品/搜索模板(app/views/products/search.html.erb)示例搜索视图:

    <% if @products.empty? %>
      No products found
    <% else %>
      <% @products.each do |product| %>
        <%= link_to product.name, product_url(product)%> 
        <br />
      <% end %>
    <% end %>
    
    Run Code Online (Sandbox Code Playgroud)