gpt4 book ai didi

ruby-on-rails - 不同 Controller 中的 link_to 'new' Action ?

转载 作者:太空宇宙 更新时间:2023-11-03 17:33:25 25 4
gpt4 key购买 nike

我想在我的 show.html.erb 底部有一个链接,该链接 links 到不同 Controller 中的 new 操作.

class Sample < ActiveRecord::Base
belongs_to :song
end

class Song < ActiveRecord::Base
has_many :samples
end

因此,在 songsshow 操作底部,我想链接到 new 以获取 samples。这看起来很容易,但我正在努力解决这个问题。我还想将歌曲的 ID 作为 :song_id

传递给表单

最佳答案

Fiddy,因为你是新手,让我解释一下这是如何工作的......


Routes

您的问题是您不了解 Rails 路由结构 - 我希望能为您解释一下。

Rails,因为它是一个MVC框架,为你建立了一系列的“路线”。这些“路线”存储在 config/routes.rb 中可用的文件中。

Rails 文档中描述的路由如下:

The Rails router recognizes URLs and dispatches them to a controller's action. It can also generate paths and URLs, avoiding the need to hardcode strings in your views.

在这里你应该考虑的最重要的事情是方式 the routes generate paths为你。这些路径只是 Rails 的“助手”方法,您可以从 View 中调用它们。这些存在的原因有两个 -

  1. They provide you with a DRY (don't repeat yourself) way of accessing / manipulating data
  2. They are constructed around objects, helping maintain the object-orientated nature of Rails

这些对您来说可能毫无意义。但是,您需要意识到,如果正确设置路由,它会极大地帮助您应用的基础架构。

--

rails

这很好地引导我们理解 Rails 的工作方式

Rails 是一个 MVC (model view controller)框架。这可能看起来有些微不足道,但实际上,这是了解 Rails 开发的最重要方面之一,原因如下:

enter image description here

Rails 软件系统的工作原理是接收“请求”(用户输入),然后将它们路由到特定的controller#actions。这些 Controller 然后从数据库构建模型数据,并将其转换为变量或对象,您可以在 View 中使用它们。

我提到这一点的原因是这种类型的开发需要很多时间来适应,因为您的程序流程与逻辑/功能无关,而是数据的可访问性。因此,当您询问路由或您应用的其他部分时,您需要首先记住您希望显示哪些数据,以及您希望如何显示这些数据 - 这将为您提供构建和使用路由/ Controller 操作的能力,这将使它正常工作

--

修复

就您所说的而言,实现您想要的结果的方法是使用 nested route :

#config/routes.rb
resources :songs do
resources :samples #-> domain.com/songs/:song_id/samples/new
end

这将为您创建一条新路线(您可以通过在您的 rails c(控制台)中触发 rake routes 来检查它。这会给您一个 用于您的 samples#new 操作的路径:

#app/views/songs/show.html.erb
<%= link_to @song.name, new_song_sample_path(@song) %>

上面的链接会将您带到 samples#show 操作,您可以从 samples Controller 中根据需要填充尽可能多的数据。需要注意的重要一点是此操作将有 params[:song_id] 可供您从中构建对象,或以其他方式

关于ruby-on-rails - 不同 Controller 中的 link_to 'new' Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25944928/

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