Rails обновляет и создает задачу - PullRequest
0 голосов
/ 05 декабря 2011

В rails при обновлении или создании, если мне нужно запустить другой метод, это то, что я делал для своих приложений. (Находится в моем контроллере)

def create
  # Perform stuff
end

def update
  # Perform stuff
end

Что-то в этом выглядит так, как будтодействительно взломан, должен быть более профессиональный способ сделать это, чем у меня сейчас.Есть ли какой-то способ, которым мне нужно настроить мою модель для запуска задач, когда модель создается или обновляется.

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

В Rails ваши контроллеры обрабатывают ваши входящие веб-запросы. Поэтому, если человек нажимает на ссылку, чтобы создать новый комментарий, он может найти маршрут, подобный следующему:

http://mysite.com/comments

Который затем направляется к действию CommentsController#create. Теперь, если у вас есть много кода для создания нового комментария, тогда да, вы должны перенести часть этого в модель Comment. В противном случае, если это довольно просто, не беспокойтесь об этом.

Пример простого сценария:

# POST /comments
def create
  @comment = Comment.new(:content => params[:comment_content])

  if @comment.save
    respond_with @comment
  else
    # error handling
  end
end

Если вам нужно запустить метод после создания этого комментария, поместите обратный вызов в модель Comment:

class Comment < ActiveRecord::Base
  after_create :do_something

  def do_something
    # some code here
  end
end

Если создать комментарий сложнее (т. Е. Если в контроллере есть тонна кода, который вам не нужен), то переместите некоторый код в модель Comment:

CommentsController

# POST /comments
def create
  @comment = Comment.create_comment!(params[:comment_content])

  if @comment.errors.any?
    # handle errors
  else
    respond_with @comment
  end
end

Комментарий модели

class << self
  def create_comment!(comment_content)
    comment = Comment.new(:content => comment_content)

    # lots of complex comment creation code goes here

    return comment
  end
end

Это позволяет вам сохранять код вашего контроллера простым, перемещая более подробный код в вашу модель.

1 голос
/ 05 декабря 2011

Как насчет обратных вызовов ActiveRecord ?

Они происходят в течение жизненного цикла вашей модели и могут использоваться для выполнения задач, когда происходит что-то, о чем вы заботитесь - например, создаваемая модель илиобновлено.

...