2011-05-31 66 views
0
I have a method find_all_media in model abc.rb. Model xyz and abc has relationship, 
abc :has_many xyzs and 
xyz :belongs_to abc 



# abc.rb 

method is in abc model 
def self.find_all_media(media_name) 

    if self.media_name == self.xyz.media_name 
    return media_name 
    end 
end 

### view file 
<% @abc.xyzs.each do |xyz| %> 
<tr> 
<td><%=h xyz.media_name %></td> 
<td><%=h xyz.type %></td> 
<td>I want to call method find all_media here ?? </td> 
</tr> 


I tried but not working, any 

回答

1

好像你

def self.find_all_media(media_name) 

    if self.media_name == self.xyz.media_name 
    return media_name 
    end 
end 

方法是一個類的方法(個體經營)。所以,你想從你的類實例訪問你的類方法

@abc 

你有兩個選擇

1 - 製作方法的實例方法(通過刪除「自我」)

2 - 打電話給你的方法Abc.find_all_media

而只是作爲一個最佳實踐,

不要直接從你的意見呼叫模型,不必通過控制器,或輔助

,如果你的 'find_all_media' 的方法是與成才數據庫查詢做考慮

:scope (in rails 3.x) (named_scope in rails 2.x) 

HTH

sameera

+0

謝謝Sameera。你能告訴我們爲什麼我們用自己?我的問題可以不用自己解決。當我們應該使用類方法和實例方法。 – user659068 2011-05-31 04:00:19

+0

hi @ user659068,Basic是如果你的方法在所有模型中使用類方法(這就是爲什麼find是一個ActiveRecord類的方法,例如User.find),當你想做一些特定的模型用戶實例方法(Ex get_amount)這個方法將當前對象的數量定爲@ use1.get_amount將爲10,@ user2.get_amount將爲20,HTH sameera – sameera207 2011-05-31 04:06:37

+0

檢查這些出來http://railstips.org/blog/archives/2009/ 05/11/class-and-instance-methods-in-ruby/http://www.rubyfleebie.com/understanding-class-methods-in-ruby/ – sameera207 2011-05-31 04:07:55

0

使用Abc.find_all_media。如果youi在方法名中使用self,則意味着此方法將與模型本身一起使用,而不是與對象一起使用。希望對大家有所幫助

+0

基於XYZ控制器/ @xyz = Abc.find_all_mediae (media_name)我得到錯誤未定義的本地變量或方法'media_name'?? – user659068 2011-06-01 23:04:26