【问题标题】:Using a form instead of hard-coding a value?使用表单而不是硬编码一个值?
【发布时间】:2014-01-14 16:25:15
【问题描述】:

我正在尝试创建一个带有按钮的单字段表单。该字段将是用户输入其用户名的地方。该字段的值将通过以下代码传递给变量@username

def home
    require 'open-uri'

    @username = "brink" 
    @url = "http://hiscore.runescape.com/index_lite.ws?player=#{@username}"
end

如您所见,@username 变量是硬编码的。我想让用户输入他想要的用户名。

之后,用户应该被重定向到一个他可以看到他的搜索结果的页面。

我将如何实现这样的功能?不太确定从哪里开始。我可以查看哪些文档来寻求帮助?

我查看的内容/评论

  1. 我读到表单本质上是发送 POST 请求。据我目前的理解,我不需要发布请求。我需要做的就是获取用户指定的内容并将其替换为 URL
  2. 按照 Rich Peck 的建议,我创建了一个新的搜索 带有主页动作的控制器。然后我将get "search(/:username)", :to => "search#home" 添加到我的路线中。

    这很棒,因为它可以输入 any 用户名进入浏览器并返回一个信息表。 现在的问题是,无论我在 浏览器,传递给爬虫的用户名仍然是 硬编码到我的控制器中的那个(在本例中为 Brink)。

    我正在寻找的是一种提交表单的方法,它会导致 @username 值相应更改。至少,我们 应该能够手动更改浏览器中的链接,并且 达到同样的效果。

  3. 从我的控制器中删除 @username = "brink" 不起作用。
  4. 这是我创建的表单:

    <%= form_tag("/search", method: "get") do %>
      <%= label_tag(:q, "Search for:") %>
      <%= text_field_tag(:q) %>
      <%= submit_tag("Search") %>
    <% end %>
    

    当我提交它时,它会运行带有硬编码 @username 的代码 价值。不过,这让我想到了。我创建的每一个表格都会 这个应用程序做同样的事情吗?

  5. 我几乎是一片空白。我觉得如此接近,却又如此遥远。哈哈。这要死我了!我想我会阅读一些路线和表格,看看它是否能让我更接近解决这个问题。

【问题讨论】:

  • 在重定向之前,您是否需要在 Rails 应用程序中做一些工作,或者“将用户发送到可以查看搜索结果的页面”?
  • 需要做一些工作。用户必须重定向到的页面是我的应用程序中的页面。我爬了@url。用户应该被重定向到我的应用程序中的一个页面,该页面显示@url 的内容,并使用了他的用户名。

标签: javascript ruby-on-rails ruby forms ruby-on-rails-4


【解决方案1】:

路线

你的问题可以用一些routes魔法解决:

#config/routes.rb
get "search(/:username)", :to => "search#home"

这将在您每次向http://hiscore.runescape.com/search/your_user_name 发送请求时传递变量params[:username]


JS

我要做的就是用 JS 处理表单提交:

#app/assets/javascripts/application.js
$("user_form").on("submit", function() {
     window.location.href = "/search/" + $("input").val();
});

【讨论】:

  • 再次感谢您的帮助,Rich... 我已将您的代码添加到我的应用程序中。我的表单需要是什么样的?
  • 我会做一些研究,直到你回来。我会相应地编辑我的原始帖子。
  • 是的...我对 JavaScript 的了解几乎为零,所以这部分对我来说很神奇。
【解决方案2】:

通过在控制器中设置@username 等于params[:username] 解决。

在视图中,我的表单标签和文本字段标记如下所示:

<%= label_tag(:username, "Search for:") %>
<%= text_field_tag(:username) %>

我的天,Rails 是魔法。发现这一切都是由于反复试验。否则我不知道我怎么会找到答案。

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多