我正在调整“入门”教程并尝试创建依赖模型的实例。
我的模特是博物馆和展览(教程中的文章和评论)。
本教程讲述了如何在Artcicle#show ERB文件中创建Comment实例。这可以通过使用以下表单帮助程序来实现:
<%= form_for([@article, @article.comments.build]) do |f| %>
我猜这个表单帮助器允许表单访问文章ID,因此允许准确的依赖。
我已经设法用自己的模特博物馆和展览来做到这一点。
虽然我希望能够创建一个展览实例,而不是位于博物馆#Exp ERB文件。但直接在展览#New ERB文件中。
我已经意识到最初没有这样做的路线,然后宣布展览作为一个适当的资源,除了依赖博物馆。 现在我的路线文件:
resources :exhibitions
resources :museums
resources :museums do
resources :exhibitions
end
已创建适当的路线。
虽然我正在努力展览#New控制器和ERB文件。
直观地说,我知道我需要传递所有博物馆实例ID和名称的列表,以便用户可以选择展览所属的博物馆。
但到目前为止,我创建表单助手的所有尝试都失败了。我的最后一次尝试是这样的:
<%= form_for([@museum, @museum.exhibitions.build]) do |f| %>
<p>
<%= f.select @museum.id, options_for_select(@museum.name) %> </p>
....
以下展览控制器位:
def new
@museum = Museum.all
end
答案 0 :(得分:1)
在这种情况下创建展示时,您不会使用嵌套表单。只需为每个博物馆提供一个选择标签选项。
controller:
def new
@exibition = Exibition.new
end
view:
<%= form_for(@exibition) do |f| %>
...
<%= f.collection_select(:museum_id, Museum.all, :id, :name) %>
答案 1 :(得分:0)
对于采用路径exhibitions#new
的{{1}}(作为示例),然后:
/museums/1/exhibitions/new
由于def new
puts params[:museum_id]
# => 1
@museum = Museum.find(params[:museum_id])
@exhibition = Exhibition.new
end
现在是一个记录对象,因此您可以在@museum
exhibitions/new.html.erb
请注意<%= form_for(@exhibition, url: museum_exhibitions_path(@museum)) do |f| %>
转换为路径museum_exhibitions_path(@museum)
,其中......
如果是GET请求,那么它将由控制器方法/museums/1/exhibitions
处理
如果是POST请求,那么它将由控制器方法exhibitions#index
处理
现在,因为exhibitions#create
默认情况下自动使用POST请求,然后form_for
将被委托给此路由,这就是我们想要的。
或者只是使用
exhibitions#create