【问题标题】:Linking a search form to a specific URL将搜索表单链接到特定 URL
【发布时间】:2013-03-16 23:21:40
【问题描述】:

我正在努力实现以下目标:

当用户在 www.something.com 的表单中输入 5 位 ID 时,用户将被重定向到 www.something.com/obtain/(5 digit ID)

我知道手动输入 url www.something.com/obtain/(5 digit ID) 会触发所需的操作,但我该如何创建一个表单来代替它呢?

无论如何我可以通过<%= form_tag .... %> 实现这一目标吗?

Rake 路由有以下条目

获取 /obtain/:pid(.:format) products#obtain {:id=>/\d+/}

当前在控制器中

  def obtain
    scrapy = Scraper.new

    @product = scrapy.scrape((params[:pid]))

    if @product
      redirect_to @product, notice: 'Product successfully updated'
    elsif
      redirect_to root_path, notice: 'Invalid product requested'
    end
  end

【问题讨论】:

  • 将您的 elsif 更改为 else。会更“正确”。

标签: ruby-on-rails forms search


【解决方案1】:

如果你提交一个表单,你将有一个函数或一些代码来处理输入,即:至少提取 request.query 之类的:

$var = request.query("ID")

因此,在该代码执行完它的任务后,您只需要一行用于重定向,例如:

whatever.redirect("www.something.com/obtain/" & $var

【讨论】:

    【解决方案2】:

    在您的视图中创建一个表单:

    <%= form_tag({:controller=>"products", :action=>"obtain"}, :method => "get") do %>
            <%= text_field_tag(:pid) %>
            <%= submit_tag "Search with PID" %>
    <% end %>
    

    我不知道您的obtain 操作是否由get 触发,但它是否不仅仅是将其更改为触发的任何内容(发布、放置)。

    【讨论】:

    • Obtain 实际上并不在数据库中搜索特定的 pid。它实际上将它传递给另一个函数以执行其他一些功能。我不确定我应该在这里修改什么。
    • 哦,我看到你添加了它。我也修改了答案。这是好还是我错过了什么?
    • 这不适用于我正在尝试做的事情。我希望表单将 ID 传递给 products#obtain 并让 get 执行必要的操作。 @product = Product.find_by_pid(params[:pid]) 可能会失败,因为获取实际上将创建一个新产品。 NVM,刚看到它确实更新了,还在检查。
    • 再次编辑以使其更加干燥。我认为如果obtain 操作有效,这应该有效
    • 天哪,等一下,我会编辑的,不需要为此做额外的操作。一分钟后查看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多