Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将父级的ID传递给新关联-rails_Ruby On Rails_Video_Controller - Fatal编程技术网

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

Ruby on rails 将父级的ID传递给新关联-rails,ruby-on-rails,video,controller,Ruby On Rails,Video,Controller,正在尝试从“编辑操作”视图传递ID 在我的表格上 <h1>Editing Video</h1> <%= render 'form' %> <br> <%= link_to 'New Poster', new_poster_path %> | <%= link_to 'Show', @video %> | <%= link_to 'Back', videos_path %> 当用户单击新海报链接时,他

正在尝试从“编辑操作”视图传递ID

在我的表格上

   <h1>Editing Video</h1>

<%= render 'form' %>

<br>
<%= link_to 'New Poster', new_poster_path %> | 
<%= link_to 'Show', @video %> |
<%= link_to 'Back', videos_path %>
当用户单击新海报链接时,他们将被定向到新海报,并可以上载图像

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

我的模型里有海报

belongs_to :video
因此,我不知道我应该如何安全地将视频编辑的ID传递到新创建的海报上

桌上海报 身份证件 海报地址
视频\u id如果海报总是属于视频,那么我会嵌套路线。您可以在
config/routes.rb
文件中执行此操作,而不是:

Rails.application.routes.draw do
  resources :videos
end
你可以

Rails.application.routes.draw do
  resources :videos do
    resources :posters
  end
end
这意味着在
海报
的每个控制器操作中,您都可以访问父
视频
对象。例如,
Poster
show操作现在将出现在url
/videos/{video\u id}/posters/{Poster\u id}
中。在进行更改后,我会运行
rake routes
,将之前的路由与嵌套后得到的路由进行比较

要总结如何更改代码,请将
new\u poster\u path
更改为
new\u video\u poster\u path(@video.id)
。然后,更改
PostersController
,使新建和创建操作如下所示:

def new
  @poster = Poster.new
end

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

请注意,这仅在您编辑
视频时有效,因为如果您正在创建视频,那么您将没有
id
传递到路由。

我使用了不同的方法,而不是嵌套路由

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

<%= link_to 'Add poster', new_poster_path(movie: @video.id), class: 'btn' %>

在表单页面上:

<%= f.input :video_id, as: :hidden, input_html: {value: params[:movie]}%>


我明白您的建议,应该可以正常工作,但是我遇到了“找不到id为的视频”错误。我尝试通过新的\u Video\u poster\u路径传递“@Video”和“@Video.id”,但没有成功。(更新说明它确实移动到了视频的编辑页面)并且海报新建的路径是videos/14/posters/new这里一定有语法问题。继续调试,如果你想不出来,就把你的路由文件和相关代码放在一个我可以看的要点中。哦,如果你使用了我给出的代码,而不是
params[:video\u id]
,“新”路由应该只使用
params[:id]
作为视频。是的,我想:id不是:video\u id,另外,我的海报参数是
def poster\u params.require(:poster)。permit(:image\u url,:video\u id)end
我将在下一篇评论中发布路线。将路线添加到主帖子
<%= link_to 'Add poster', new_poster_path(movie: @video.id), class: 'btn' %>
<%= f.input :video_id, as: :hidden, input_html: {value: params[:movie]}%>