2014-03-03 33 views
0

我在助手文件中有一個非常簡單的方法。它需要一個對象(tool)has_many services。每個service有一個:completed日期。我想要這種方法使用內置的關聯來檢查每個service。如果service.name包含字符串「年度」和service.completed.year == DateTime.now.year,那麼方法應該返回true,否則它應該返回false。下面是我在tools_helper.rb文件的方法:助手中的Rails方法在控制檯中不起作用

def annual_service? 
    self.services.each do |service| 
    if (service.name =~ /annual/) && (service.completed.year == DateTime.now.year) 
     return true 
    end 
    end 
end 

Too.rb型號:

class Tool < ActiveRecord::Base 
    has_many :repairs 
    has_many :services 
    has_many :expended_parts, through: :services 
    has_many :service_types, through: :services 
    belongs_to :category 
    belongs_to :location 
    accepts_nested_attributes_for :repairs 
    accepts_nested_attributes_for :services 

    validates :serial, :uniqueness => true 
    validates :serial, :presence => true 
end 

Service.rb型號:

class Service < ActiveRecord::Base 
    before_destroy :replace_parts 
    belongs_to :tool 
    belongs_to :service_type 
    has_many :expended_parts, dependent: :destroy 
    has_many :parts, through: :expended_parts 

    after_create :withdraw_parts 

    default_scope order('due_date DESC') 
end 

我能做到這一點Rails的控制檯上:

t = Tool.find(16) 
t.services.each do |service| 
if (service.name =~ /annual/) && (service.completed.year == DateTime.now.year) 
    puts "true" 
end 
end 

returns => true 

但是如果我這樣做:

t.annual_service? 

returns => false 

我沒有得到一個unknown method錯誤,如果我做的:

t.respond_to? :annual_service 

returns => true 

我失去了一些東西簡單。但似乎無法弄清楚。

回答

0

輔助模塊中的方法不能在控制器和模型文件中自動生效。在你看來,你可以直接使用助手方法。

也許你可以將輔助模塊包含到「工具」類中,然後重試。就像:

class Tool < ActiveRecord::Base 
    include Your_Helper_Module # ToolsHelper? 
    ............................ 

end 
+0

啊!我一直忘記這個事實。我在視圖中使用這個。有沒有辦法在控制檯中加載它來測試它? – Beartech

+0

我的解決方案能工作嗎?將你的模塊包含到模型類中。 – lalameat

+0

是的,我接受它,一旦我在視圖中測試它。謝謝! – Beartech

相關問題