2011-04-25 46 views
0

我想在我的web应用程序的索引页上做一个表单。现在,我有一个名为home_controller.rb的控制器和一个名为index.html.erb的视图。这两个人现在处理我网站的“索引”。我也试图向该页面添加一个表单。的index.html.erb内容是:简单的导轨形式的用例帮助

<%= form_tag(query_path, :method => "get") do %> 
    <%= submit_tag("Go!") %> 
<% end %> 

然而,铁轨给我这个错误,当我加载页面:

未定义的局部变量或方法 `query_path”

这里是我的想我想要发生:我想home_controller.rb中的另一个行动,这被称为query(现在是唯一的行动在这个控制器我s index)。这个query动作是当你点击“Go!”时从我的表单中调用的动作。我如何做到这一点?什么需要在那里而不是query_path

编辑:

我觉得必须有一个简单的答案,而不是修改routes.rb文件。我如何错误地思考这个路由业务?在我的脑海中,我的页面上的任何操作都应默认为现有页面的控制器。因此,如果我在我的index.html.erb页面上,该页面属于我的home_controller.rb,我的:action => 'query'应该默认查找我的home_controller.rb中的操作。 为什么这不会发生?这正是我想要发生的事情。

也许我正在考虑这是完全错误的方式,这就是为什么我们一起黑客解决方案。这就是我想要的:我希望用户点击一个按钮,这会导致应用程序查询外部API,获取一些JSON并显示JSON的内容。在我的脑海中,这意味着按钮转到另一个操作,在同一个控制器中查询外部API,并将JSON传递回显示在完全相同的页面上(所有这些都使用Ajax)。我以错误的方式接近这个问题吗?

+0

什么版本铁轨是这样的吗? – 2011-04-25 04:43:42

+0

3.0.7(#FILLERTEXTISANNOYING) – sepiroth 2011-04-25 04:45:57

回答

1

看起来你需要做的是在config/routes.rb中添加一个路由。您可以使用rake routes查看您当前的路线名称。一个例子航线低于

# Will create query_path mapping to home.query action 
match 'home/query' => 'home#query', :as => :query 

编辑

你需要明确定义,是因为Rails3中不会默认为`[控制器]/[动作]”通配符映射。不推荐使用RESTful控制器。如果您想再次启用此功能,您可以在routes.rb中取消注释,但不推荐这样做。

0

首先,您可能需要一个帖子而不是get。表单将如下所示:

<%= form_tag query_path do %> 
    ... (your form elements here) 
    <%= submit_tag "Submit" %> 
<% end %> 

您指定的query_path是命名的路由。对于你的情况,你需要这样的路线。RB:

scope :path => '/home', :controller => :home do 
    post 'query' => :query, :as => 'query' 
    end 

编辑:

如果这确实是一个GET方法,只需添加:方法=> “获取” 的形式和路径更改为:

scope :path => '/home', :controller => :home do 
    get 'query' => :query, :as => 'query' 
    end 
+0

你为什么假设他想要一个post请求? – 2011-04-25 04:50:20

+0

基于他的问题,我认为使用post请求会更自然。但是,如果这确实是一个获得,他可以保持:方法得到。这只是我的假设,这就是为什么我认为这很可能,当然不确定:)但让我编辑我的帖子,以更好地说明。 – Spyros 2011-04-25 04:52:33