2014-04-06 118 views
0

即使在聲明輔助方法之後,錯誤仍然是Item的未定義方法'get_image_url'。未定義方法rails - 從視圖調用控制器方法

儘管我不明白爲什麼視圖中的某些東西應該明確地啓用來調用控制器方法。

這是模型法

def item_url 
    return self.image_url # simplified version for simplicities sake 
end 

,並在控制器

def get_image_url 
    Item.item_url 
end 
helper_method :get_image_url 

視圖

<% @items.each do |item| %> 
    <img src="<%= item.get_image_url%>"></img> 
<% end %> 

我不知道該怎麼做這個,我覺得我的設計並不理想,我需要更多經驗豐富的開發人員提供一些反饋。啊

回答

1

首先,你想如果你在一個「裸」模型打電話來從非啓動的對象調用一個實例方法

item_url應該是class method,或者應該初始化調用實例方法:

#Instance 
def get_image_url 
    @item = Item.find(1) 
    @item.item_url 
end 

#Class 
def get_image_url 
    Item.item_url 
end 

def self.item_url 
    item = find(1) 
    item.image_url 
end 

你有下一個問題是你打電話,你認爲什麼是一個實例方法作爲helper。問題是你直接引用你的模型,並應通過模型來完成


修復

沒有意義調用get_image_url方法 - 你只是路由到一個模型的方法呢。您應該在模型中將item_url重命名爲get_image_url,並將其作爲您視圖中的實例方法進行調用。因爲你的clothing_item對象是你Item模型的初始化版本,你就可以在其上使用的實例方法沒有問題:當你調用像get_image_url的方法Item類,Rails的物體上

<% @clothing_items.each do |clothing_item| %> 
    <img src="<%= clothing_item.get_image_url%>"></img> 
<% end %> 

#app/models/item.rb 
def get_image_url 
    image_url # simplified version for simplicities sake 
end 
1

item.rb中尋找Item類定義中的方法定義。但Rails在那裏找不到它。因此,Rails說這個方法是不確定的。

另一個問題是Item.item_url。這是調用Item類本身的方法,而不是該類的對象或對象。因此,您需要在Item模型中將方法item_url定義爲類方法(而不是實例方法)。

但是,在這裏,如果您的目標是分別顯示每個項目的圖像,我認爲您不需要使用類方法。您可以直接使用您的視圖文件,並在您的模型中將get_image_url定義爲實例方法。

相關問題