我正在调整“入门”教程,并试图创建一个依赖模型的实例。
我的模型是博物馆和展览(文章和评论在本教程)。
本教程教您如何在Artcicle#show ERB文件中创建注释实例。这是通过使用以下表单助手来实现的:
<%= form_for([@article, @article.comments.build]) do |f| %>我猜这个表单助手允许表单访问项目Id,因此允许精确的依赖。
我通过我自己的模特博物馆和展览成功地做到了这一点。
虽然是,但我希望能够在不位于Museum#Show ERB文件的情况下创建Museum#Show实例。但是直接在Exhibition#New的ERB文件中。
我已经意识到,最初没有这样做的途径,然后宣布展览作为一个适当的资源,除了依赖博物馆。在这里,我的路线档案:
resources :exhibitions
resources :museums
resources :museums do
resources :exhibitions
end创造了合适的路线。
尽管我正在努力处理Exhibition#New控制器和ERB文件。
直觉上,我知道我需要传递一个所有博物馆实例、I和名称的列表,以便用户可以选择该展览属于哪个博物馆。
但是到目前为止,我创建表单助手的所有尝试都失败了。我的最后一幕是这样的:
<%= 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发布于 2016-01-04 10:36:14
在本例中,创建exibition时不使用嵌套表单。只需为每个博物馆提供一个选项标签。
controller:
def new
@exibition = Exibition.new
end
view:
<%= form_for(@exibition) do |f| %>
...
<%= f.collection_select(:museum_id, Museum.all, :id, :name) %>发布于 2016-01-04 10:36:28
对于您的exhibitions#new (以路由路径/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)转换为路径/museums/1/exhibitions,其中.
exhibitions#index处理。exhibitions#create处理。现在,由于form_for默认自动使用POST请求,所以exhibitions#create将被委派到此路由,这正是我们所希望的。
或者直接用
<%= form_for([@museum, @exhibition]) do |f| %>https://stackoverflow.com/questions/34588399
复制相似问题