简单的Rails形成用例帮助

时间:2011-04-25 04:39:08

标签: ruby-on-rails forms

我正在尝试在我的网络应用的索引页面上创建一个表单。现在,我有一个名为home_controller.rb的控制器和一个名为index.html.erb的视图。那两个人现在处理我网站的“索引”。我还试图在该页面上添加一个表单。 index.html.erb的内容是:

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

但是,当我加载页面时,rails会给我这个错误:

  

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

以下是我认为想要发生的事情:我希望home_controller.rb中的另一个操作称为query(此时此控制器中的唯一操作是{{1} }})。此index操作是您单击“开始!”时从我的表单调用的操作。我该如何实现这一目标?需要什么而不是query

修改

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

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

2 个答案:

答案 0 :(得分:1)

看起来您需要做的是在config / routes.rb中添加路由。您可以使用rake routes查看当前路径名称。示例路线在

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

修改

您需要明确定义它,因为rails3不默认为“[controller] / [action]'通配符映射。不建议用于RESTful控制器。如果您想再次启用此功能,可以在routes.rb中取消注释,但不建议这样做。

答案 1 :(得分:0)

首先,你可能需要一个帖子而不是get。表格如下:

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

您指定的query_path是命名路由。对于你的情况,你需要在你的routes.rb中这样......

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

编辑:

如果这确实是一个get方法,只需添加:method =&gt; “获取”表单并将路径更改为:

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