使用表单而不是硬编码值?

时间:2013-12-27 04:05:37

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

我正在尝试使用按钮创建单字段表单。该字段将是用户输入其用户名的位置。该字段的值将在以下代码中传递给变量@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"添加到我的路线中。

    这很棒,因为它可以输入任何 用户名进入浏览器并返回一个信息表。 现在的问题是,无论我输入的用户名是什么 浏览器,传递给抓取工具的用户名仍然是 硬编码到我的控制器中的那个(在这种情况下,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. 我几乎一片空白。我感觉如此接近,但却如此遥远。哈哈。这是在杀我!猜猜我会对路线和表格做一些阅读,看看它是否让我更接近解决这个问题。

2 个答案:

答案 0 :(得分:2)

<强>路线

你的问题可以通过一些routes魔法来解决:

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

每次向params[:username]

发送请求时,都会传递变量http://hiscore.runescape.com/search/your_user_name

<强> JS

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

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

答案 1 :(得分:0)

通过在控制器中将@username设置为params[:username]来解决此问题。

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

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

我的神Rails很神奇。发现这一切都是由于反复试验。我不知道怎么会找到答案。