Jac*_*lin 12 ruby ruby-on-rails ruby-on-rails-3.1
我刚刚开始使用Ruby on Rails,并且遇到了从特定视图链接到控制器中的另一个动作的问题.我几乎可以肯定这是我routes.rb文件中的一个问题(或缺少代码),但我认为我误解了这个文件是如何工作的以及我必须做什么.我有一个解决方案,但很确定这不是"最好的方法".
我有一个控制器调用home两个动作,index(这是默认值)和newbill.里面index.html.erb我有:
<h1>Home View</h1>
<%= link_to "new", :controller => "home", :action => "newbill" %>
Run Code Online (Sandbox Code Playgroud)
但是我遇到了路由错误:
No route matches {:controller=>"home", :action=>"newbill"}
Run Code Online (Sandbox Code Playgroud)
做rake routes了给我以下内容:
root / {:controller=>"home", :action=>"index"}
Run Code Online (Sandbox Code Playgroud)
然后我(跟随一些谷歌搜索)添加此代码 routes.rb
match 'home/newbill' => 'home#newbill', :as => :newbill
Run Code Online (Sandbox Code Playgroud)
然后在我,index.html.erb我有这个:
<%= link_to "Name", newbill_path %>
Run Code Online (Sandbox Code Playgroud)
现在这可以按预期工作.我的问题是:
match 'home/newbill'...为我想要链接的每个控制器/动作添加另一个似乎是一种垃圾的做事方式.我真的很喜欢Ruby,但是在Rails的这个方面有点挣扎......一般来说,路由有点让我觉得搞砸了!
非常感谢任何帮助:D
谢谢,
插口
我猜你的代码第一次不起作用,因为你的home控制器被定义为资源.
如果将控制器定义为routes.rb文件中的资源,它将仅支持7种标准方法(根据REST架构):
index
new
create
show
edit
update
destroy
Run Code Online (Sandbox Code Playgroud)
如果你需要更多的自定义路线,你应该手动添加它们,比如你的情况'newbill',可以如下:
resources :home do
collection do
get :newbill
end
end
Run Code Online (Sandbox Code Playgroud)
但根据我的理解,你的newbill方法应该转到bills控制器new,而不是家用控制器中的方法.
你是对的,Rails路线有点令人困惑(至少对我而言),但一旦你明白你可以做很多很酷的事情.
在这里阅读Rails官方路线文档:
http://guides.rubyonrails.org/routing.html.
| 归档时间: |
|
| 查看次数: |
39353 次 |
| 最近记录: |