When to use Helpers vs Model

后端 未结 3 877
醉话见心
醉话见心 2020-12-14 16:02

I\'m new to Rails and just wondering when I should put code into a Helper as opposed to putting the code into the Model.

Is there a \'rule of thumb\' so to speak for

相关标签:
3条回答
  • 2020-12-14 16:14

    Helpers should only contain logic for the view

    Models should contain only logic related to the object modeled, never related with the transaction performed neither the view rendered

    0 讨论(0)
  • 2020-12-14 16:24

    It's best to use helpers when the code that the helper is creating is meant to be displayed in the view only. For example if you want to have methods that help create HTML links, they should go in the helper:

    def easy_link user
      link_to(user.name, user)
    end
    

    If your code is business logic it should go in your models. You should also aim to put as much business logic in your models, you don't want this code in your views and controllers. For example, if you want to process an order, that code should go in the model:

    def process
      raise NotReadyToProcess unless ready_to_process?
      raise NotValidPaymentDetails unless valid_payment_details?
      process_payment
    end
    
    0 讨论(0)
  • 2020-12-14 16:32

    Use helpers if you're working in a view (template) and you need to build a complex bit of HTML such as a <table>. Or, if you want to change some presentation data that's not connected to the database.

    def truncate_html( html, options = {} )
      options[:length] = 35 unless options[:length]
      truncate( strip_tags( html ), options )
    end
    

    Use models when you're working with database objects, and you want to simplify the business logic.

      def one_day?
        start_date.to_s[0,9] == end_date.to_s[0,9]
      end  
    

    Here's Helpers in the guides: http://guides.rubyonrails.org/form_helpers.html

    And here's Models: http://guides.rubyonrails.org/active_record_querying.html

    0 讨论(0)
提交回复
热议问题