2013-01-02 33 views
2

我有路線是這樣的:通過AJAX加載嵌套資源(軌道)

resources :projects do 
    resources :tasks 
end 

它給你一個網址,像這樣:URL /項目/ 14 /任務/ 3

的模型定義:

project has_many :tasks 
task belongs_to :project 

眼下,當鏈接用戶點擊一個任務,我加載任務#顯示成通過遠程=>真正的鏈接一個div從項目的展示視圖中。這工作正常。

#tasks/show.js.erb 

$('#task_content').html("<%= j render(partial: 'tasks/single', locals: { t: @task }) %>"); 

#tasks/_single.html.erb 

<%= t.content %> 

的問題是,我希望用戶能夠自動訪問URL /項目/ 14 /任務/ 3,並有任務加載到在div上項目視圖。

基本上,我需要找到一種方法,有URL/projects/14/tasks/3實際呈現URL/projects/14,並調用一個jQuery $('a#task_<%= task.id %>').click()

我似乎無法弄清楚如何去獲得的觀點認識到這種行爲的。任何人都可以指引我正確的方向嗎?

謝謝!

EDIT

#TasksController 
    def show 
    @task = Task.find(params[:id]) 
    respond_to do |format| 
     format.js 
    end 
    end 


#ProjectsController 
    def show 
    @project = Project.find(params[:id]) 
    respond_to do |format| 
     format.html # show.html.erb 
    end 
    end 

項目#顯示有兩個主要元件:具有TASK_ <%一個id = task.id%>

  • 股利,任務

    1. 鏈接 內容應加載(div#task_content)
  • 回答

    1

    基本上,我需要找到一種方法讓URL/projects/14/tasks/3 實際呈現URL/projects/14,並調用jquery $('a#task_ <%= task.id% >')。點擊()

    您可以測試任務由一個標準的HTTP調用(非AJAX)達成一致,並重定向到該項目的URL,傳遞一個參數來自動加載任務負載。由於默認情況下使用js格式,這是更簡單 - 你可以測試一個html格式:

    #TasksController 
    def show 
        @task = Task.find(params[:id]) 
        respond_to do |format| 
        format.html { redirect_to project_path(@task.project_id, :load_task_id => @task.id) } 
        format.js 
        end 
    end 
    
    # somewhere in /projects/show partial 
    <% if params[:load_task_id] %> 
        <script type="text/javascript"> 
        $(function(){ 
         $('a#task_<%= params[:load_task_id] %>').click() 
        }); 
        </script> 
    <% end %> 
    
    +0

    謝謝!我已經添加了控制器(簡化版)並解釋了#show view中正在生成的項目。 @PinnyM – nathan

    +0

    @Nathan:更新 – PinnyM

    +0

    工程就像一個魅力!謝謝! – nathan

    1

    我可能會使用Rails Routing Constraints直接XHR請求的任務控制器和發送HTTP請求到項目控制器將任務ID作爲參數,將該變量提供給您的視圖,然後您的視圖可以檢查任務變量是否存在並加載div?或者用JS檢查URL,也許。

    match "/projects/:id/tasks/:tid", :to => "projects#show", :constraints => lambda { |request| !request.xhr? } 
    match "/projects/:id/tasks/:tid", :to => "tasks#show", :constraints => lambda { |request| request.xhr? } 
    

    未經測試,但可能WERK:

    的線沿線的東西嗎?