首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将父级ID传递给新的关联- rails

将父级ID传递给新的关联- rails
EN

Stack Overflow用户
提问于 2015-08-12 03:27:07
回答 2查看 1.3K关注 0票数 2

试图从Edit操作视图传递ID

在我的表格上

代码语言:javascript
复制
   <h1>Editing Video</h1>

<%= render 'form' %>

<br>
<%= link_to 'New Poster', new_poster_path %> | 
<%= link_to 'Show', @video %> |
<%= link_to 'Back', videos_path %>

当用户在视频编辑表单上时,我希望他们能够编辑属于视频的海报(has_many :海报)

关于我添加的视频控制器的编辑操作

代码语言:javascript
复制
@poster = Poster.new

当用户单击新的海报链接时,它们被定向到新的海报,并可以上传图像。

当我创建记录时,它不会传递视频的ID。

我在模特的海报上

代码语言:javascript
复制
belongs_to :video

因此,我不知道如何安全地将我所使用的视频编辑的ID传递给新创建的海报。

桌子海报id poster_url video_id <-这应该有我刚刚编辑的视频的id .

路线:

代码语言:javascript
复制
 Rails.application.routes.draw do
      resources :posters
      resources :people

      resources :profiles
      devise_for :users

      resources :videos do
        resources :posters
      end

      # The priority is based upon order of creation: first created -> highest priority.
      # See how all your routes lay out with "rake routes".

      # You can have the root of your site routed with "root"
       root 'home#index'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-14 05:42:49

我采用了另一种方法,而不是筑巢路线。

我将链接中的一个参数向下传递到表单,将其作为值引用,然后通过:

代码语言:javascript
复制
<%= link_to 'Add poster', new_poster_path(movie: @video.id), class: 'btn' %>

在表格页上:

代码语言:javascript
复制
<%= f.input :video_id, as: :hidden, input_html: {value: params[:movie]}%>
票数 2
EN

Stack Overflow用户

发布于 2015-08-12 03:39:31

如果海报总是属于一个视频,那么我就筑巢路线。您可以在您的config/routes.rb文件中这样做,而不是拥有:

代码语言:javascript
复制
Rails.application.routes.draw do
  resources :videos
end

你可以

代码语言:javascript
复制
Rails.application.routes.draw do
  resources :videos do
    resources :posters
  end
end

这意味着,在Poster的每个控制器操作中,您都可以访问父Video对象。例如,Poster显示操作现在将出现在url /videos/{video_id}/posters/{poster_id}中。我会在进行更改后运行rake routes,以比较您在嵌套之前和嵌套后得到的路由。

总结一下如何更改代码,请将new_poster_path更改为new_video_poster_path( @video.id )。然后,更改PostersController,使新的和创建的操作看起来如下所示:

代码语言:javascript
复制
def new
  @poster = Poster.new
end

def create
  @video = Video.find( params[:video_id] )
  @poster = @video.posters.new( my_permitted_params )
  ...
end

请注意,只有在编辑Video时才能这样做,因为如果要创建它,就没有id可以传递到路由。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31955516

复制
相关文章

相似问题

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