Ruby on rails 将父级的ID传递给新关联-rails
正在尝试从“编辑操作”视图传递ID 在我的表格上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 %> 当用户单击新海报链接时,他
<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]}%>