[英]Optional belongs_to and Rails routing
我正在開發一個Rails 3任務演示項目,其中Project
每個實例都有很多tasks
, Task
實例屬於一個project
。 但是,后一種關系是可選的,盡管它在Task
模型中定義為belongs_to :project
。
基本上,我希望能夠擁有如下路線:
example.com/tasks/1
example.com/tasks/new
example.com/project/1/tasks/1
example.com/project/1/tasks/new
我不確定這是可能的,甚至是好的做法。 對我來說,最重要的是能夠在一般tasks#index
action中創建無項目任務,從項目內部屬於項目的任務project#show
通過鏈接到new
操作來project#show
動作。
我從Outside In讀過Rails Routing ,但它並沒有真正解釋我的目標。
任何幫助將不勝感激。
這實際上比你想象的更常見。 這是一個解決方案:
class TasksController < ApplicationController
before_filter :get_project
before_filter :get_tasks
private
def get_project
@project = Project.find(params[:project_id]) if params[:project_id]
end
def get_tasks
@tasks = (@project) ? @project.tasks : Task
end
end
從那里開始,當你想要完成任務時,你總是會引用@tasks。
舉個例子:
def new
@tasks.new(params[:task])
end
無論您是否嵌套,都會產生正確的結果。
在嵌套的情況下,它就像調用:
@projects.tasks.new(params[:task])
沒有嵌套,就像調用:
Task.new(params[:task])
這些路線與協會無關。 您可以擁有自己喜歡的任何路線,即使您沒有任何關聯。 你的路線似乎很好。
該協會是一件方便的事情。 它使程序員的生活更輕松。 如果你甚至需要寫一些像:
task.projects
然后,您必須在任務/項目之間建立has_many(或其他)關聯。 這有很多是允許你做task.projects的那個。 如果您沒有關聯,則必須使用查找程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.