从自定义路径插入2个表

时间:2013-06-08 20:46:44

标签: ruby-on-rails

我有一个Rails应用程序,用户可以从索引页面中选择数据表( cosmics )。 我在该页面上有一个按钮,该按钮连接到自定义路线 start_batch 。路线出现在rake:routes上,尽管没有GET或PUT。

当按下它时,我想在另外两个表中创建行:批次 batch_details

相反,当我按下按钮时,Rails正试图转到 cosmics 控制器的show动作。

耙:路由

start_batch        /cosmics/start_batch(.:format)                      cosmics#start_batch

cosmics_controller

def start_batch
  @batch = Batch.create!(:status => 'created',:status_timestamp => Time.now)
  @cosmics.where(:selected == true) do |cosmic|
    @batch_detail = BatchDetail.create!(:batch_id => @batch.id, :gene => @cosmic.gene,   :mut_freq => @cosmic.mut_freq)
    @batch_detail.save
  end
end

的routes.rb

resources :batches do
  resources :batch_details
end

resources :cosmics 
match '/cosmics/start_batch', :to => 'cosmics#start_batch', :as => 'start_batch'

cosmics / index.html.erb

<%= link_to 'Process', start_batch_path, :class =>"btn btn-primary" %>

我有一个我看不到的错误,或者我完全错误地做了这个错误吗?

2 个答案:

答案 0 :(得分:2)

您必须将start_batch路线放在resources :cosmics

之前
match '/cosmics/start_batch', :to => 'cosmics#start_batch', :as => 'start_batch'**
resources :cosmics 

Rails使用与routes.rb中请求的网址匹配的第一条路线。第resources :cosmics行生成get /cosmics/:idCosmicsController.show的路线。此路由在自定义路由匹配'/ cosmics / start_batch'之前捕获/cosmics/start_batch请求,这就是它必须放在之后的原因。

您可以看到resources :cosmicsrake routes生成的路由(路由按优先级排序)。 Rails routing guide中还有一个例子。

答案 1 :(得分:2)

问题是您的match路线低于resources :cosmics。顺序在这里很重要,因为正在发生的事情是它在资源"start_match"上的显示路线上匹配时将cosmics解释为ID。如果你将其移到resources :comics以上,你应该没问题。