Дополнение метода Бейтса `find_commentable` - PullRequest
0 голосов
/ 23 октября 2010

Я смотрю скринкаст Райана Бейтса о полиморфных отношениях, и он использует этот закрытый метод для поиска всех комментариев, связанных с вложенной моделью.

Чтобы я мог найти все комментарии к данному сообщению с помощью этого сообщения:

def find_commentable
  params.each do |name, value|
    if name =~ /(.+)_id$/
      return $1.classify.constantize.find(value)
    end
  end
  nil
end

А затем используется:

@commentable = find_commentable
@comments = @commentable.comments

Комментарии публикуются с помощью этой формы:

- form_for [@commentable, Comment.new] do |f|
  = f.label :text, 'Comment'
  %br/
  = f.text_area :text, :style => "height: 100px;"
  %br/
  = f.submit "Submit"

Но что, если на той же странице я хотел бы иметь форму для каждого комментария? Как мне настроить форму form_for для этого и что должен указать ее контроллер?

1 Ответ

0 голосов
/ 23 октября 2010

Я начал с метода find_commentable и разделил его следующим образом:

def find_commentable
  params.each do |name, value|
    if params[:comment]
      return Comment.find(params[:comment][:id])
    elsif name =~ /(.+)_id$/
      return $1.classify.constantize.find(value)
    end
  end
  nil
end

И идентификатор передается как скрытое поле из формы.

Оттуда обычный контроллер позаботится о сохранении.

...