试图从Edit操作视图传递ID
在我的表格上
<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 :海报)
关于我添加的视频控制器的编辑操作
@poster = Poster.new当用户单击新的海报链接时,它们被定向到新的海报,并可以上传图像。
当我创建记录时,它不会传递视频的ID。
我在模特的海报上
belongs_to :video因此,我不知道如何安全地将我所使用的视频编辑的ID传递给新创建的海报。
桌子海报id poster_url video_id <-这应该有我刚刚编辑的视频的id .
路线:
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'发布于 2015-08-14 05:42:49
我采用了另一种方法,而不是筑巢路线。
我将链接中的一个参数向下传递到表单,将其作为值引用,然后通过:
<%= link_to 'Add poster', new_poster_path(movie: @video.id), class: 'btn' %>在表格页上:
<%= f.input :video_id, as: :hidden, input_html: {value: params[:movie]}%>发布于 2015-08-12 03:39:31
如果海报总是属于一个视频,那么我就筑巢路线。您可以在您的config/routes.rb文件中这样做,而不是拥有:
Rails.application.routes.draw do
resources :videos
end你可以
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,使新的和创建的操作看起来如下所示:
def new
@poster = Poster.new
end
def create
@video = Video.find( params[:video_id] )
@poster = @video.posters.new( my_permitted_params )
...
end请注意,只有在编辑Video时才能这样做,因为如果要创建它,就没有id可以传递到路由。
https://stackoverflow.com/questions/31955516
复制相似问题