2011-05-31 54 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