2012-04-30 46 views
0

我是剛剛開始的Ruby-on-Rails新手。在索引頁面中共享視圖的正確方式

我有一個MVC稱爲 「account_types」,經由支架產生,以產生:

  • 控制器/ account_types_controller.rb
  • 助手/ account_types_helper.rb
  • 模型/ account_type.rb
  • 觀點/ account_types/_form,編輯,索引等...

去localhost:3000/account_types給我索引視圖。

我想要做的是顯示與應用程序索引頁面中的account_types索引方法中選擇的數據相同的數據作爲列表。

我寫了一個叫account_types/_list.html_erb新觀點如下:

<ul> 
<% @account_types.each do |account| %> 
    <li><% account.label %></li> 
<% end %> 
</ul> 

我然後編輯家/ index.html.erb(這是基於對SO其他問題給出的例子):

<%= render :partial => 'account_types/list', :module_types => @module_types %> 

但是我得到

未定義的方法`每個」近親:NilClass

和錯誤顯示從account_types/_list.html.erb,我已經寫了

<% @account_types.each do |account| %> 

腳手架意見做工精細的代碼,爲什麼不是我?

部分是否適合在此使用?

在此先感謝。

回答

0

您將:module_types設置爲部分,但使用account_types。我所看到的,你只需要你的index.html.erb更改爲:

<%= render :partial => 'account_types/list', :account_types => @module_types %> 
+0

對不起,如上所述,我已經混淆了每個人與module_types - 這是我嘗試的其他東西 - 它應該是account_types。 '<%= render:partial =>'account_types/list',:account_types => @account_types%>仍然會給出相同的錯誤消息。 – Hellfire

+0

我創建了一個新項目來重新創建此問題。我已經像以前一樣設置了一切。 如果我不添加(amp)account_types = AccountType.all到home_controller.rb,我得到相同的錯誤關於nil.each 如果我(account_types = accountType.all)添加到home_controller.rb然後我得到每個記錄有一個li,但沒有數據列表(這本身很奇怪)。但是,(amp)account_types已經在account_types_controller.rb中定義了,所以爲了DRY的利益,我能以某種方式使用來自account_types的索引控制器,而不必在home控制器中重寫它以在主視圖中使用它? – Hellfire

+1

我想我現在有工作。 http://stackoverflow.com/questions/8869291/what-is-the-correct-way-to-define-an-application-wide-partial-and-its-variables說在'ApplicationController'上使用'before_filter' 。我已經把它放進去了,每個控制器突然都有'account_types'變量。這正是我需要的。 – Hellfire

0

您可以使用諧音爲這個,如果你想要的,雖然它會在這種情況下是不必要的,據我可以告訴(他們用於在幾個視圖之間共享代碼塊)。爲了得到這個代碼工作,你需要在你的控制器來定義@account_types喜歡的東西

@account_types = AccountType.all 

你可以看到確切的行你account_types_controller.rbindex行動。 :module_types => @module_types在這裏沒有必要,因爲我懷疑你定義了@module_types或者你根本就沒有使用module_types

很明顯,你不明白Rails是如何工作的,所以我建議你在閱讀一個好的教程(比如this one)之前仔細閱讀你的想法。

+0

糟糕。 module_types是我嘗試的其他東西。它應該是account_types。抱歉。 我在控制器中有'@account_types = AccountType.all'。麻煩的是我的自定義視圖似乎無法訪問變量@account_types,所以它抱怨它是零。如何讓我的自定義視圖以與AccountTypesController.index一樣的方式訪問@account_types? – Hellfire

+0

好吧,你可以像':account_types => @ account_types'那樣強制傳遞它,但是你需要將你的partial中的@ account_types更改爲'account_types'。 – TsukinoMai

相關問題