Ruby on rails Rails 5:事件系统
我正在制作一个事件系统。我有一个模型事件,每个事件都有文件、报告、提供者等等 以下是我今天的路线:Ruby on rails Rails 5:事件系统,ruby-on-rails,ruby,ruby-on-rails-5,associations,Ruby On Rails,Ruby,Ruby On Rails 5,Associations,我正在制作一个事件系统。我有一个模型事件,每个事件都有文件、报告、提供者等等 以下是我今天的路线: scope 'app', :module => "app" do resources :events, :roteiros, :convidados, :lista_convidados, :orcamentos, :orcamento_items, :providers, :provider
scope 'app', :module => "app" do
resources :events, :roteiros,
:convidados, :lista_convidados,
:orcamentos, :orcamento_items, :providers,
:providers_items, :reports, :reports_items,
:modelos, :modelos_items, :arquivos, :arquivos_items
end
我正在寻找其他模型的最佳方式,当编辑或创建新数据时,新信息与事件模型关联,然后每个事件都将有与之关联的信息
我认为应该是这样的:
scope 'app', :module => "app" do
resources :events do
:roteiros,
:convidados, :lista_convidados,
:orcamentos, :orcamento_items, :providers,
:providers_items, :reports, :reports_items,
:modelos, :modelos_items, :arquivos, :arquivos_items
end
end
然后url看起来像/app/events/event name/providers
我仍然需要获取事件id,以便将新记录与特定事件关联
所有模型都已具有要关联的事件id
值
谢谢你的帮助
更新
现时路线:
控制器
局部的
看法
-
-
-
卡斯托埃斯蒂马多酒店
R$0,00
卡斯托雷亚尔酒店
R$0,00
勇敢的帕戈
R$0,00
彭登特客栈
R$0,00
描述
卡斯托埃斯蒂马多酒店
卡斯托雷亚尔酒店
勇敢的帕戈
潘登特勇气酒店
普罗西莫·文西门托
雷亚尔美元
雷亚尔美元
雷亚尔美元
雷亚尔美元
{:controller=>“orcamento_items”,:action=>“create”},:html=>{:method=>:post}do | f |%>
小计
R$0.000
R$0.000
R$0.000
R$0.000
-
奥拉门托酒店
诺梅达利斯塔酒店
阿迪西奥纳尔·奥拉门托
任务%>
首先,您需要在嵌套项前面放置
资源。比如:
scope 'app', :module => "app" do
resources :events do
resources :roteiros,
:convidados, :lista_convidados,
:orcamentos, :orcamento_items, :providers,
:providers_items, :reports, :reports_items,
:modelos, :modelos_items, :arquivos, :arquivos_items
end
end
resources :events do
resources :arquivos,
:arquivos_items,
:convidados,
:lista_convidados,
:modelos,
:modelos_items,
:orcamento_items,
:orcamentos,
:providers,
:providers_items,
:reports,
:reports_items,
:roteiros,
shallow: true
end
当您在控制台中运行rake routes
时,它将为您提供如下信息:
event_roteiros GET /app/events/:event_id/roteiros(.:format) app/roteiros#index
POST /app/events/:event_id/roteiros(.:format) app/roteiros#create
new_event_roteiro GET /app/events/:event_id/roteiros/new(.:format) app/roteiros#new
edit_event_roteiro GET /app/events/:event_id/roteiros/:id/edit(.:format) app/roteiros#edit
event_roteiro GET /app/events/:event_id/roteiros/:id(.:format) app/roteiros#show
PATCH /app/events/:event_id/roteiros/:id(.:format) app/roteiros#update
PUT /app/events/:event_id/roteiros/:id(.:format) app/roteiros#update
DELETE /app/events/:event_id/roteiros/:id(.:format) app/roteiros#destroy
... omitting a bunch of routes ...
events GET /app/events(.:format) app/events#index
POST /app/events(.:format) app/events#create
new_event GET /app/events/new(.:format) app/events#new
edit_event GET /app/events/:id/edit(.:format) app/events#edit
event GET /app/events/:id(.:format) app/events#show
PATCH /app/events/:id(.:format) app/events#update
PUT /app/events/:id(.:format) app/events#update
DELETE /app/events/:id(.:format) app/events#destroy
event_arquivos GET /events/:event_id/arquivos(.:format) arquivos#index
POST /events/:event_id/arquivos(.:format) arquivos#create
new_event_arquivo GET /events/:event_id/arquivos/new(.:format) arquivos#new
edit_arquivo GET /arquivos/:id/edit(.:format) arquivos#edit
arquivo GET /arquivos/:id(.:format) arquivos#show
PATCH /arquivos/:id(.:format) arquivos#update
PUT /arquivos/:id(.:format) arquivos#update
DELETE /arquivos/:id(.:format) arquivos#destroy
... omitting a bunch of routes ...
events GET /events(.:format) events#index
POST /events(.:format) events#create
new_event GET /events/new(.:format) events#new
edit_event GET /events/:id/edit(.:format) events#edit
event GET /events/:id(.:format) events#show
PATCH /events/:id(.:format) events#update
PUT /events/:id(.:format) events#update
DELETE /events/:id(.:format) events#destroy
如您所见,这将导致所有内容都在app
下命名。这意味着您的控制器需要如下所示:
class App::RoteirosController < ApplicationController
...
end
我猜你不会想要的。因此,它应该更像:
resources :events do
resources :roteiros,
:convidados, :lista_convidados,
:orcamentos, :orcamento_items, :providers,
:providers_items, :reports, :reports_items,
:modelos, :modelos_items, :arquivos, :arquivos_items
end
正如上面所讨论的,你可以考虑做一些类似的事情:
scope 'app', :module => "app" do
resources :events do
resources :roteiros,
:convidados, :lista_convidados,
:orcamentos, :orcamento_items, :providers,
:providers_items, :reports, :reports_items,
:modelos, :modelos_items, :arquivos, :arquivos_items
end
end
resources :events do
resources :arquivos,
:arquivos_items,
:convidados,
:lista_convidados,
:modelos,
:modelos_items,
:orcamento_items,
:orcamentos,
:providers,
:providers_items,
:reports,
:reports_items,
:roteiros,
shallow: true
end
在这种情况下,您将得到如下结果:
event_roteiros GET /app/events/:event_id/roteiros(.:format) app/roteiros#index
POST /app/events/:event_id/roteiros(.:format) app/roteiros#create
new_event_roteiro GET /app/events/:event_id/roteiros/new(.:format) app/roteiros#new
edit_event_roteiro GET /app/events/:event_id/roteiros/:id/edit(.:format) app/roteiros#edit
event_roteiro GET /app/events/:event_id/roteiros/:id(.:format) app/roteiros#show
PATCH /app/events/:event_id/roteiros/:id(.:format) app/roteiros#update
PUT /app/events/:event_id/roteiros/:id(.:format) app/roteiros#update
DELETE /app/events/:event_id/roteiros/:id(.:format) app/roteiros#destroy
... omitting a bunch of routes ...
events GET /app/events(.:format) app/events#index
POST /app/events(.:format) app/events#create
new_event GET /app/events/new(.:format) app/events#new
edit_event GET /app/events/:id/edit(.:format) app/events#edit
event GET /app/events/:id(.:format) app/events#show
PATCH /app/events/:id(.:format) app/events#update
PUT /app/events/:id(.:format) app/events#update
DELETE /app/events/:id(.:format) app/events#destroy
event_arquivos GET /events/:event_id/arquivos(.:format) arquivos#index
POST /events/:event_id/arquivos(.:format) arquivos#create
new_event_arquivo GET /events/:event_id/arquivos/new(.:format) arquivos#new
edit_arquivo GET /arquivos/:id/edit(.:format) arquivos#edit
arquivo GET /arquivos/:id(.:format) arquivos#show
PATCH /arquivos/:id(.:format) arquivos#update
PUT /arquivos/:id(.:format) arquivos#update
DELETE /arquivos/:id(.:format) arquivos#destroy
... omitting a bunch of routes ...
events GET /events(.:format) events#index
POST /events(.:format) events#create
new_event GET /events/new(.:format) events#new
edit_event GET /events/:id/edit(.:format) events#edit
event GET /events/:id(.:format) events#show
PATCH /events/:id(.:format) events#update
PUT /events/:id(.:format) events#update
DELETE /events/:id(.:format) events#destroy
但是,根据您的示例,您似乎希望使用:event\u name
作为标识符,而不是:event\u id
。在这种情况下,您将执行以下操作:
resources :events, param: :name do
resources :arquivos,
:arquivos_items,
:convidados,
:lista_convidados,
:modelos,
:modelos_items,
:orcamento_items,
:orcamentos,
:providers,
:providers_items,
:reports,
:reports_items,
:roteiros,
shallow: true
end
这将给你:
event_arquivos GET /events/:event_name/arquivos(.:format) arquivos#index
POST /events/:event_name/arquivos(.:format) arquivos#create
new_event_arquivo GET /events/:event_name/arquivos/new(.:format) arquivos#new
edit_arquivo GET /arquivos/:id/edit(.:format) arquivos#edit
arquivo GET /arquivos/:id(.:format) arquivos#show
PATCH /arquivos/:id(.:format) arquivos#update
PUT /arquivos/:id(.:format) arquivos#update
DELETE /arquivos/:id(.:format) arquivos#destroy
... omitting a bunch of routes ...
events GET /events(.:format) events#index
POST /events(.:format) events#create
new_event GET /events/new(.:format) events#new
edit_event GET /events/:name/edit(.:format) events#edit
event GET /events/:name(.:format) events#show
PATCH /events/:name(.:format) events#update
PUT /events/:name(.:format) events#update
DELETE /events/:name(.:format) events#destroy
我想这就是你要找的。你好。非常感谢你的帮助。正如你所说,路线是如何运作的。但是当添加到项目的链接时,键入event_orcamentos_url我会得到错误:没有路由匹配{:action=>“index”,:controller=>“app/orcamentos”,:id=>“teste de evento”},缺少必需的键:[:event_id]。我应该更改控制器中的某些内容以获取事件的id吗?我的控制器只获取特定项的id,如def set_orcamento@orcamento=orcamento.find(params[:id])endI尝试使用event_orcamentos_url(@event),但当我转到link时,我没有得到任何路由匹配{:action=>“index”,:controller=>“app/orcamentos”,:event\u id=>nil},路径中缺少必需的键:[:event\u id]:您可能应该使用event\u orcamentos\u路径(@event)
。然后,您需要确保在控制器操作中设置了@event
实例。看起来您可能没有设置@event
,这就是您获得:event\u id=>nil
的原因。此外,您还需要决定是使用:id
还是:name
作为标识符。如您所见这里:没有与之匹配的路由{:action=>“index”,:controller=>“app/orcamentos”,:id=>“teste de evento”}
,看起来您试图使用名称
作为id
。
resources :events, param: :name do
resources :arquivos,
:arquivos_items,
:convidados,
:lista_convidados,
:modelos,
:modelos_items,
:orcamento_items,
:orcamentos,
:providers,
:providers_items,
:reports,
:reports_items,
:roteiros,
shallow: true
end
event_arquivos GET /events/:event_name/arquivos(.:format) arquivos#index
POST /events/:event_name/arquivos(.:format) arquivos#create
new_event_arquivo GET /events/:event_name/arquivos/new(.:format) arquivos#new
edit_arquivo GET /arquivos/:id/edit(.:format) arquivos#edit
arquivo GET /arquivos/:id(.:format) arquivos#show
PATCH /arquivos/:id(.:format) arquivos#update
PUT /arquivos/:id(.:format) arquivos#update
DELETE /arquivos/:id(.:format) arquivos#destroy
... omitting a bunch of routes ...
events GET /events(.:format) events#index
POST /events(.:format) events#create
new_event GET /events/new(.:format) events#new
edit_event GET /events/:name/edit(.:format) events#edit
event GET /events/:name(.:format) events#show
PATCH /events/:name(.:format) events#update
PUT /events/:name(.:format) events#update
DELETE /events/:name(.:format) events#destroy