>假设我在路由中定义了以下行
resources :a, controller: 'b', as: 'a'
和以下控制器
class BController < ApplicationController
...
def new
@b = B.new
end
def edit
@b = B.find(params[:id])
end
end
有没有办法编写部分窗体,以便我可以在新视图和编辑视图上使用它?例如,如果我写
<%= form_for @b do |f| %>
...
<% end %>
Rails 给了我一个路由错误。
不优雅的解决方案
我想出了一个不优雅的解决方案,将BController写成
class BController < ApplicationController
...
def new
@b = B.new
@url = bs_path
end
def edit
@b = B.find(params[:id])
@url = b_path
end
end
然后将表单写为
<%= form_for(@b, url: @url) do |f| %>
...
<% end %>
我想知道是否有一种更"Rails"的方式来实现这一目标,而无需写入@url变量
似乎您可能正在寻找资源的:path
选项...如果我正确遵循您的示例,那么您有一个模型B
,并且您希望在/a
或/a/:id
访问它并能够使用a_path(instance_of_b)
......所以我觉得你希望你的路线是
resources :b, as: 'a', path: 'a'
我相信这会做你想要的。