Ruby on rails 对Rails上的特定操作使用模型?

Ruby on rails 对Rails上的特定操作使用模型?,ruby-on-rails,ruby,controller,models,Ruby On Rails,Ruby,Controller,Models,我对RoR非常陌生,我很难弄清楚什么时候应该使用控制器或其他东西,比如一个包含业务逻辑的特定情况的模型 我有一个帖子模型,它有一个在Twitter上分享的方法,比如: class Post < ActiveRecord::Base def send_to_twitter! Twitter.update("#{self.title} #{self.url}") end end 我不应该这样做,因为我在模型上有业务逻辑,理论上是不允许的(据我所知)。但这是完成这类任务最简单的

我对RoR非常陌生,我很难弄清楚什么时候应该使用控制器或其他东西,比如一个包含业务逻辑的特定情况的模型

我有一个帖子模型,它有一个在Twitter上分享的方法,比如:

class Post < ActiveRecord::Base
  def send_to_twitter!
    Twitter.update("#{self.title} #{self.url}")
  end
end
我不应该这样做,因为我在模型上有业务逻辑,理论上是不允许的(据我所知)。但这是完成这类任务最简单的方法

我的问题是,这样做对吗还有更好的办法吗? 谢谢

业务逻辑属于该模型。模型存储数据,并对该数据执行操作。所以这是完全正确的

控制器是模型和渲染输出之间的粘合剂,也是处理用户输入的粘合剂。控制器告诉模型要做什么,但模型应该是做这件事的人

俗话说“瘦小的控制器,肥胖的模特”。告诉您的模型要做什么应该是简单和容易的(控制器代码),即使执行这些操作的代码是复杂和长的(模型代码)


把你的应用想象成机场。空中交通管制员是你的“管制员”。他们告诉飞机(模型)在与其他飞机(其他模型)检查其安全性时着陆。然后它告诉飞机降落,但飞机自己降落

模型应该知道如何使用自己的数据执行任务。但决定何时执行这些任务通常是控制器的工作

class AirPortController
  def request_landing(plane)
    if @landing_planes.size == 0
      plane.land!
      @landing_planes << plane
    else
      plane.request_again_in(5.minutes)
    end
  end
end
class机场控制器
def请求着陆(飞机)
如果@landing_planes.size==0
飞机着陆!

@降落飞机你在哪里呼叫
Post.find(9)。发送到twitter从?
class AirPortController
  def request_landing(plane)
    if @landing_planes.size == 0
      plane.land!
      @landing_planes << plane
    else
      plane.request_again_in(5.minutes)
    end
  end
end