2015-02-23 61 views
1

我有一个“Productions”控制器,如果您访问localhost/productions您会看到一个索引页面,您可以单击显示并查看该特定作品的显示页面。 每个生产都有一个唯一的ID喜欢036ea872f9011a7c,我希望我的用户能够将项目添加到生产类似如下:rails-将信息传递给基于url的控制器

localhost/productions/036ea872f9011a7c/fixtures/add 
localhost/productions/036ea872f9011a7c/positions/add 
localhost/productions/036ea872f9011a7c/dimmers/add 
localhost/productions/036ea872f9011a7c/channels/add 
localhost/productions/036ea872f9011a7c/etc/add 
+3

您是否阅读过[关于路由的Rails指南](http://guides.rubyonrails.org/routing.html)?它都在那里。 – zwippie 2015-02-23 15:45:37

+0

您可以通过在模型中定义'to_param'方法来自动使用URL中的唯一ID,以返回唯一的ID而不是数据库ID。 – 2015-02-23 16:17:51

回答

1

你应该建立与这样的必要参数的路线:

假设我们有我们分配给项目

模型project.rb任务:

class Project < ActiveRecord::Base 
    has_many :tasks, through: :project_task 
end 

模型task.rb

class Task < ActiveRecord::Base 
    has_many :projects, through: :project_task 
end 

的routes.rb

... 
resources :projects do 
    member do 
    get 'affect_task/:task_id', action: 'affect_task', as: :affect_task          
    end 
end 

项目/ show.haml

= link_to "task_name", affect_task_project_path(task_id: @task_id, project_id: @project_id) 

controller.rb

... 
def affect_task 
... 
    CollaboratorTask.create(task_id: params[:task_id], project_id: params[:project_id])  
... 
end 
... 

当然,这是一个例子,所以你明白..

相关问题