0

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

当它被按下时,我想在另外两个表中创建行:batchesbatch_details

相反,当我按下按钮时,Rails 正试图进入cosmics控制器的显示操作。

耙:路线

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

宇宙控制器

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

路线.rb

resources :batches do
  resources :batch_details
end

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

宇宙/index.html.erb

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

我是否有一个我看不到的错误,或者我这样做完全不正确?

4

2 回答 2

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/:id到 的路线CosmicsController.show。该路由/cosmics/start_batch在自定义路由匹配“/cosmics/start_batch”之前捕获请求,这就是为什么它必须放在后面的原因。

可以看到resources :cosmicswith生成rake routes的路由(路由按优先级排序)。Rails 路由指南中还有一个示例。

于 2013-06-08T20:54:45.820 回答
2

问题是您的match路线低于resources :cosmics. "start_match"顺序在这里很重要,因为当它与资源上的显示路由匹配时,它被解释为 ID cosmics。如果你把它移到上面resources :comics,你应该没问题。

于 2013-06-08T20:54:57.773 回答