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

时间:2015-08-12 03:27:08

标签: ruby-on-rails video controller

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

在我的表格上

belongs_to :video

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

在视频控制器的编辑操作中,我添加了

 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'

当用户点击新海报链接时,他们会被定向到新海报并可以上传图片

当我创建记录时 - 它没有传递视频的ID。

我的模型中有海报

SELECT table1.id 
FROM (
       SELECT id, sum(column) as A 
       FROM table1 
       GROUP BY id 
     ) a1
Left join (
       SELECT id, 
       sum(column) as B 
       FROM table 2 
       GROUP BY Id 
    ) a2
    on table1.id=table2.id

.

.

.

.

Left join (
            SELECT id, sum(column) as G 
            FROM table 7
            GROUP BY id
          ) g1
          on table1.id=table7.id 

Having or where A+B - (C+D+E+F+G) >0

所以我不知道如何安全地将我所拍摄的视频编辑的ID传递给新创建的海报。

表海报 ID poster_url video_id< - 这应该具有我刚编辑的视频的ID ...

路线:

if (isset($_POST['no_peserta_mhs_2015'])) {
$colname_rec_mhs_2015 = $_POST['no_peserta_mhs_2015'];
}
mysql_select_db($database_connect, $connect);
$query_rec_mhs_2015 = sprintf("SELECT * FROM mhs_2015 WHERE no_peserta_mhs_2015 = %s or nama_mhs_2015 like %s ", GetSQLValueString($colname_rec_mhs_2015, "text"), GetSQLValueString($colname_rec_mhs_2015, "text"));

2 个答案:

答案 0 :(得分:2)

如果海报总是属于某个视频,那么我就会对该路线进行嵌套。您可以在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 show动作现在会出现在网址/videos/{video_id}/posters/{poster_id}中。我会在进行更改后运行rake routes来比较之前的路线与嵌套后的路线。

总结如何更改代码,将new_poster_path更改为new_video_poster_path( @video.id )。然后,更改PostersController,以便new和create操作看起来像这样:

def new
  @poster = Poster.new
end

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

请注意,这仅适用于您正在修改Video的情况,因为如果您正在创建它,那么您没有id传递给该路线。

答案 1 :(得分:1)

我采用了不同的方法而不是嵌套路线。

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

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

在表单页面上:

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