繁体   English   中英

使用Ruby on Rails link_to链接到控制器操作

[英]Using Ruby on Rails link_to to link to controller action

我刚刚开始使用Ruby on Rails,并且遇到了从特定视图链接到控制器中的另一个动作的问题。 我几乎可以肯定这是我的routes.rb文件中的一个问题(或缺少代码),但我认为我误解了这个文件是如何工作的以及我必须做什么。 我有一个解决方案,但很确定这不是“最好的方法”。

我有一个名为home控制器,有两个动作, index (默认值)和newbill index.html.erb里面我有:

<h1>Home View</h1>
<%= link_to "new", :controller => "home", :action => "newbill" %>

但是我遇到了路由错误:

No route matches {:controller=>"home", :action=>"newbill"}

rake routes给我以下内容:

root  / {:controller=>"home", :action=>"index"}

然后我(跟随一些谷歌搜索)将此代码添加到routes.rb

match 'home/newbill' => 'home#newbill', :as => :newbill

然后在我的index.html.erb我得到了这个:

<%= link_to "Name", newbill_path %>

现在这可以按预期工作。 我的问题是:

  1. 为什么这样做? 幕后究竟发生了什么?
  2. 当然这不是最好的方法吗? 为我想要链接的每个控制器/动作添加另一个match 'home/newbill'...似乎是一种垃圾的做事方式。

我真的很喜欢Ruby,但是在Rails的这个方面有点挣扎......一般来说,路由有点让我觉得搞砸了!

非常感谢任何帮助:D

谢谢,

插口

我猜你的代码第一次不起作用,因为你的home控制器被定义为资源。

如果将一个控制器定义为routes.rb文件中的资源,它将仅支持7种标准方法(根据REST架构):

index
new
create
show
edit
update
destroy

如果你需要更多的自定义路线,你应该手动添加它们,比如在你的情况下'newbill',可以如下:

resources :home do
    collection do
      get :newbill
    end
end

但根据我的理解,你的newbill方法应该是new bills控制器,而不是在家庭控制器中。

你是对的,Rails路线有点令人困惑(至少对我而言),但一旦你明白你可以做很多很酷的事情。

在这里阅读Rails官方路线文档:

http://guides.rubyonrails.org/routing.html

您应该查看Rails路由指南 通读将帮助您了解幕后发生的事情。

这是因为rails会通过路由器过滤每个请求以查找匹配项。 这使您可以在路径实际为blog#post时定义域名/路径等自定义路由。 在rails 3之前,catch-all路由是routes文件中的最后一个路由。 这允许您定义控制器和操作,它只会工作。 我在我的iPad上并没有接近任何项目,所以我无法验证它,但我认为这条路线仍然存在于rails 3.1中,它只需要被评估。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM