如何将params从视图传递到控制器并将其保存到变量中?

时间:2017-06-22 06:58:24

标签: ruby-on-rails ruby

所以我正在研究这个rails项目。我试图从视图中获取输入并将其传递给控制器​​,因此可以将其保存到变量中供以后使用。

我的/views/welcome/index.html.erb视图层包含以下内容:

<div class="locator-input">
  <%= text_field_tag :user_input %>
  <%= submit_tag "Get started" %>
</div>

/controller/welcome_controller.rb

中的控制器
class WelcomeController < ApplicationController
  def index
  end

  def locator
    @user_input = params['user_input']
  end
end

routes.rb此处

Rails.application.routes.draw do

  root 'welcome#index'

end

因此当我继续点击提交时,我收到此错误:

Ugly error !

我知道此错误与routes.rb有关,但我无法弄清楚如何修复它。

我的最终目标是获取用户输入,将其传递给控制器​​并将其保存到变量中,以便稍后可以将其用于我的模型。

我将非常感谢我们的专家提供的一些指导。

感谢。

2 个答案:

答案 0 :(得分:2)

使用root生成的路由只需GET个请求。但是您的表单会发送POST个请求。

要解决此问题,只需将以下内容添加到config/routes.rb

即可
root 'welcome#index'
match '/', to: 'welcome#index', via: [:post]

答案 1 :(得分:1)

以表格

包裹字段
<div class="locator-input">
  <%= form_tag locator_welcome_path %>
    <%= text_field_tag :user_input %>
    <%= submit_tag "Get started" %>
  <% end %>
</div>

您还需要创建路线

Rails.application.routes.draw do
  resource :welcome, controller: :welcome do
    post :locator
  end

  root 'welcome#index'    
end

这将生成

locator_welcome POST   /welcome/locator(.:format)                                                                                                  welcome#locator