我知道有人问过,但没有解决办法。
我正在尝试将组ID传递给过程控制器,因此我可以将该过程属于该组。
群展视图:
<%= link_to 'Create a Procedure', new_procedure_path(:group => @group.id), class: 'btn btn-default btn-small' %>
程序控制器:
def new
@procedure = Procedure.new
@group = Group.find(params[:group])
路线:
resources :groups, only: [:new, :create, :show, :destroy]
resources :procedures
答案 0 :(得分:1)
如果需要group_id,请将其作为网址的一部分,并且在表单视图中不需要它。你在params中有group_id:params[:group_id]
是控制器应该期待的。
resources :groups, only: [:new, :create, :show, :destroy] do
resources :procedures
end
在您的控制器中,执行以下操作:
def new
@group = Group.find(params[:group_id])
@procedure = @group.procedures.new
end
你会像这样链接到新页面
<%= link_to 'Create a Procedure', new_group_procedure_path(@group), class: 'btn btn-default btn-small' %>
答案 1 :(得分:0)
要进一步添加Swards
答案,您正在查看nested resources ...
#config/routes.rb
resources :groups, except: [:edit, :update] do
resources :procedures #-> url.com/groups/:group_id/procedures/new
end
-
当您向服务器发送请求时,您正在请求&#34;资源&#34;。
由HTTP spec定义,
客户端向服务器提交HTTP请求消息。服务器,提供HTML文件等资源和其他内容,或代表客户端执行其他功能
这就是Rails路由有resources
指令的原因。
在您的情况下,您要求的资源需要依赖另一个父母&#34;资源,因此您使用&#34;嵌套&#34;图案。这提供了&#34;父母&#34;的参数。依赖控制器中的var:
#app/controllers/procedures_controller.rb
class ProceduresController < ApplicationController
before_action :set_group
def new
@procedure = @group.procedures.new
end
private
def set_group
@group = Group.find params[:group_id]
end
end
-
您的关联方式适用于Swards
推荐;您也可以从polymorphic_path
获益:
<%= link_to 'Create a Procedure', new_polymorphic_path([@group, :procedure]), class: 'btn btn-default btn-small' %>