2013-12-13 83 views
0

我是Ruby on Rails的新手,並且IM卡在了這麼簡單的東西上,但我無法弄清楚。在軌道上的ruby中未定義的方法

我搭建了一個Video模型,控制器和視圖,然後爲主頁創建了一個Welcome控制器。

我在welcome視圖文件夾中手動創建了一個index.html.erb文件,然後將主頁路由到Welcome#index。現在所有的工作都很好。

事情是,當我在這樣的

def foo 
    puts 'Hello' 
end 

welcome_controller定義一個方法,我把它在歡迎/ index.html的文件中像這樣

<%= foo %> 

我得到以下錯誤:未定義的局部變量或方法'foo'爲#<#:0x39675d8>

回答

1

個控制器操作不視圖助手,你會希望把foo在任何application_helper.rbwelcome_helper.rb使用它像你和它更改爲刪除puts,像這樣:

def foo 
    'Hello' 
end 

這將插入Hello到您的視圖(這是我想你期待)根據您在下面的意見,你或許應該使用模型中的scope

...

scope :highlighted -> { (where(highlight: true) } 

...從你的控制器返回突出記錄...

@highlighted = Videos.highlighted 

...然後遍歷@highlighted在你看來...

<% @highlighted.each do |video| %> 
<%= ...do something with video here... %> 
<% end %> 

,請仔細閱讀關於這一切都在這裏:

http://guides.rubyonrails.org/index.html

和specificially這裏範圍...

http://guides.rubyonrails.org/active_record_querying.html

+0

什麼即時試圖做的是調用此方法 '模塊WelcomeHelper 高清search_highlight @highlighted = Videos.where(亮點:真) 放@highlighted 結束 end' 但現在我得到一個未初始化不斷的錯誤。我試着只輸出「你好」,未定義的方法錯誤消失,但「你好」沒有輸出在屏幕上。 – user3099920

+0

不使用'puts' ...你希望方法返回一個字符串(或另一個對象),而不是將它發送到STDOUT。 – Donovan

0

不能調用控制器中的任意 「東西」。

控制器中暴露的是它的實例變量,例如@foo

如果你真的來調用使用puts的方法,把它放在一個幫手,例如,welcome_helper.rb(或任何約定會)。

但是,請注意,這不會做你認爲它會的東西,即在網頁上放置一個「你好」。你基本上直接寫入控制檯,甚至不是日誌文件。

你試圖完成什麼特別的?

+0

什麼即時試圖做的是調用此方法 '模塊WelcomeHelper 高清search_highlight @highlighted = Videos.where(亮點:真) 放@highlighted 結束 end' 但現在我得到一個未初始化的恆定誤差。我試着只輸出「你好」,未定義的方法錯誤消失,但「你好」沒有輸出在屏幕上。 – user3099920

+1

@ user3099920因爲'puts'與渲染HTML無關,正如我已經說過的。幫助者用於返回HTML字符串。您可以迭代視頻並返回該集合的一串HTML。我*不會*,我會用部分。 –

相關問題