簡體   English   中英

可選的belongs_to和Rails路由

[英]Optional belongs_to and Rails routing

我正在開發一個Rails 3任務演示項目,其中Project每個實例都有很多tasksTask實例屬於一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM