gpt4 book ai didi

ruby-on-rails - 使用 Ruby on Rails link_to 链接到 Controller 操作

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:29 25 4
gpt4 key购买 nike

我刚开始接触 Ruby on Rails,遇到了从特定 View 链接到 Controller 中的另一个操作的问题。我几乎可以肯定这是我的 routes.rb 文件中的一个问题(或缺少代码),但我认为我误解了这个文件的确切工作方式以及我必须做什么。我有一个解决方案,但很确定这不是解决问题的“最佳方式”。

我有一个名为 home 的 Controller ,它有两个操作,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. 当然这不是最好的方法吗?为我想链接到的每个 Controller / Action 添加另一个 match 'home/newbill'... 似乎是一种垃圾做事方式。

我真的很喜欢 Ruby,但在 Rails 的这方面有点挣扎......我认为一般的路由有点让我头疼!

非常感谢任何帮助:D

谢谢,

jack

最佳答案

我想您的代码第一次无法运行是因为您的 home Controller 被定义为资源。

如果您在 routes.rb 文件中将 Controller 定义为资源,它将仅支持 7 种标准方法(根据 REST 架构):

index
new
create
show
edit
update
destroy

如果您需要更多的自定义路由,您应该手动添加它们,在您的案例中说“newbill”,可能是:

resources :home do
collection do
get :newbill
end
end

但根据我的理解,你的 newbill 方法应该转到 bills Controller new,方法不在 home Controller 中。

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

在此处阅读 Rails 官方路由文档:

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

关于ruby-on-rails - 使用 Ruby on Rails link_to 链接到 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8190240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com