首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建依赖模型的新实例

创建依赖模型的新实例
EN

Stack Overflow用户
提问于 2016-01-04 09:50:21
回答 2查看 274关注 0票数 0

我正在调整“入门”教程,并试图创建一个依赖模型的实例。

我的模型是博物馆和展览(文章和评论在本教程)。

本教程教您如何在Artcicle#show ERB文件中创建注释实例。这是通过使用以下表单助手来实现的:

代码语言:javascript
复制
<%= form_for([@article, @article.comments.build]) do |f| %>

我猜这个表单助手允许表单访问项目Id,因此允许精确的依赖。

我通过我自己的模特博物馆和展览成功地做到了这一点。

虽然是,但我希望能够在不位于Museum#Show ERB文件的情况下创建Museum#Show实例。但是直接在Exhibition#New的ERB文件中。

我已经意识到,最初没有这样做的途径,然后宣布展览作为一个适当的资源,除了依赖博物馆。在这里,我的路线档案:

代码语言:javascript
复制
resources :exhibitions

resources :museums

resources :museums do
   resources :exhibitions
end

创造了合适的路线。

尽管我正在努力处理Exhibition#New控制器和ERB文件。

直觉上,我知道我需要传递一个所有博物馆实例、I和名称的列表,以便用户可以选择该展览属于哪个博物馆。

但是到目前为止,我创建表单助手的所有尝试都失败了。我的最后一幕是这样的:

代码语言:javascript
复制
<%= form_for([@museum, @museum.exhibitions.build]) do |f| %>

<p>

  <%= f.select @museum.id, options_for_select(@museum.name) %>     </p>
....

具有下列展览控制器位:

代码语言:javascript
复制
def new
@museum = Museum.all
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-04 10:36:14

在本例中,创建exibition时不使用嵌套表单。只需为每个博物馆提供一个选项标签。

代码语言:javascript
复制
controller:

def new
    @exibition = Exibition.new
end


view:
<%= form_for(@exibition) do |f| %>
    ...
    <%= f.collection_select(:museum_id, Museum.all, :id, :name) %>
票数 1
EN

Stack Overflow用户

发布于 2016-01-04 10:36:28

对于您的exhibitions#new (以路由路径/museums/1/exhibitions/new为例),则:

代码语言:javascript
复制
def new
  puts params[:museum_id]
  # => 1

  @museum = Museum.find(params[:museum_id])
  @exhibition = Exhibition.new
end

由于@museum现在是一个记录对象,所以您可以在exhibitions/new.html.erb中使用以下内容

代码语言:javascript
复制
<%= form_for(@exhibition, url: museum_exhibitions_path(@museum)) do |f| %>

请注意,museum_exhibitions_path(@museum)转换为路径/museums/1/exhibitions,其中.

  1. 如果它是一个GET请求,那么它将由控制器方法exhibitions#index处理。
  2. 如果是POST请求,则将由控制器方法exhibitions#create处理。

现在,由于form_for默认自动使用POST请求,所以exhibitions#create将被委派到此路由,这正是我们所希望的。

或者直接用

代码语言:javascript
复制
<%= form_for([@museum, @exhibition]) do |f| %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34588399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档