2013-10-14 25 views
1

我剛剛完成向我的Ruby on Rails應用程序添加嵌套資源。在rails視圖中調用變量

這主要是猜測,複製和粘貼。

現在一切正常。

但我擔心的是,在使用網址幫手,我不得不用兩個不同的變量形式 - 一個以@在開始時,一個沒有@。

在我的部分,我用:

=> link_to t('ui.edit'), edit_course_lesson_path(@course, lesson) 

萬一我以前教訓添加 '@',我得到了以下錯誤:

Routing Error 

No route matches {:action=>"edit", :controller=>"lessons", :course_id=>#<Course id: 2, 
title: "title x", user_id: 1, subject_id: 1, student_level_id: 1, objectives: "obj xx", 
created_at: "2013-08-09 15:51:38", updated_at: "2013-08-09 15:51:38">, :id=>nil} 

Try running rake routes for more information on available routes. 

在我定期訪問量:

=> link_to t('ui.edit'), edit_course_lesson_path(@course, @lesson) 

最後一個例子,如果我寫當然沒有「@」,然後我得到:

undefined local variable or method `course' for #<#<Class:0x007f5e10082800>:0x007f5e10a64760> 

只是想知道添加或意見省略「@」的區別。可能這裏的關鍵因素是部分 vs 常規視圖

非常感謝!

PS:另外,我發現在嵌套資源主題這篇文章有用:

http://blog.8thcolor.com/2011/08/nested-resources-with-independent-views-in-ruby-on-rails/

回答

1

@表示實例變量,在你的控制你的模型的實例集。有些觀點會叫偏比如:

= render @courses 

將調用部分稱爲_course.html.haml(或ERB或苗條),並自動傳遞給本地變量爲每個渲染。

裏面那部分,可以使用使用本地變量course,例如

= course.subject.title 
= course.title 

所以在你的控制器,你通常會使用實例變量因此他們在控制器動作可用,這意味着它可以在諧音通過您的看法,而局部變量叫做不能用於渲染的標準視圖。

1

你對RoR開發很新穎,對吧? 我鼓勵完全通過一些初學者的Rails和Ruby書籍,因爲它似乎並不瞭解Ruby的一些基本概念。

對你的問題的簡短和非常近似的答案。

變量而不@符號是存在於局部範圍內的局部變量 - 方法的範圍,局部範圍,查看範圍,塊範圍等

變量與@標誌是實例變量 - 它們在實例範圍存在。在控制器和視圖範圍的情況下是相同的,所以在控制器動作中定義的實例變量是在你的泛音,意見,佈局可用。

那些,如果不確定他們不拋出任何錯誤,一個討厭的事情 - 你只是得到一個零對象返回。這就是您的路由錯誤實際發生的情況 - @lesson是零,Rails無法構建正確的URL。

在你的第二個情況下,您試圖調用不存在一個局部變量,所以它拋出一個NoMethodError,因爲畢竟沒有找到變量它試圖調用相同名稱的方法。

相關問題