2017-01-10 25 views
2

我試圖按照「在Rails 5中調用幫助器方法的新方法」提到here,原來是PR here控制器中的Rails 5實例級別助手方法不能識別助手。方法

我可以得到「老辦法」用下面的工作:「幫手」

# app/models/order.rb 
class Customer < ActiveRecord::Base 
    include CustomersHelper 
    # some code... 

    def name_make_uppercase 
    self.first_name = uppercase(first_name) 
    self.last_name = uppercase(last_name) 
    end 
end 

# app/helperss/customers_helper.rb 
module CustomersHelper 
    def uppercase(input) 
    return unless input 
    input[0] = input[0].to_s.capitalize 
    input 
    end 
end 

然而,隨着新的方法,我相信我應該能夠刪除「包括CustomersHelper」,並添加到我在控制器中的大寫功能,例如

# app/models/order.rb 
class Customer < ActiveRecord::Base 
    # include CustomersHelper 
    # some code... 

    def name_make_uppercase 
    self.first_name = helpers.uppercase(first_name) 
    self.last_name = helpers.uppercase(last_name) 
    end 
end 

不過,現在我的規格的越來越以下錯誤:

NameError: undefined local variable or method `helpers' for #Customer:0x00000004d50be8>

我很好奇,我可能是做錯了。

回答

4

helpers方法是隻在控制器可用,你想在模型使用它。模型不(也不應該)有關於他們的視圖/控制器/助手的知識。

它看起來像你需要的是一個常規模塊(即不是一個Rails助手)或者也許是一個裝飾器(例如draper)在任何情況下,helpers方法不會幫助你在這裏。

1

建議您將幫助器方法限制爲查看模板,並且不要將視圖助手混合到rails模型類中。

您可以簡單地使用capitalize(爲String類寶石標準庫法)到您的實例,從模型的實例方法屬性以及。

# app/models/order.rb 
class Customer < ActiveRecord::Base 

    def name_make_uppercase 
    self.first_name = first_name.capitalize 
    self.last_name = last_name.capitalize 
    end 

end 

,並使用它:

c = Customer.new(first_name: 'bruce', last_name: 'wayne') 
c.name_make_upcase 
c.first_name #=> 'Bruce' 
c.last_name #=> 'Wayne'