Как сделать форму из полиморфной таблицы? - PullRequest
1 голос
/ 15 октября 2010

Я пытаюсь создать комментарий, который может комментировать другие комментарии, но все они получены из одного поста.

Что меня особенно беспокоит, так это попытаться выяснить, как сделать так, чтобы все это могло быть достигнуто на пост-шоу, а не на его редактировании или новом. Разве это разумно с точки зрения архитектуры?

Таким образом, я могу получить к нему доступ через Post.comments, или Comment.comments и т. Д., Или Comments.parent

Мои модели:

#comment.rb

  belongs_to  :post
  belongs_to  :parent, :class_name => 'Comment'
  has_many    :children, :class_name => 'Comment'

  validates_presence_of :text

#post.rb

  has_many                      :comments
  accepts_nested_attributes_for :comments

posts_controller

def show
  @post = Post.find(params[:id])


  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml => @post }
  end
end

routes.rb

resource :comments

Я добавил в таблицу комментариев атрибуты :text и :post_id. Хотя я не думаю, что это нужно :post_id,

Как должна выглядеть моя форма, где она должна быть?

Вот моя ужасная попытка:

  - form_for @post do |f|
    - f.fields_for :comments do |c|
      = f.label 'Comments'
      = f.text_area :text
      = f.submit 'Submit'

Но, похоже, в этом нет необходимости.

1 Ответ

1 голос
/ 16 октября 2010

Два ключевых компонента для завершения этого были:

Поскольку это в шоу, мне нужно указать URL, на который эти сообщения:

- form_for @post do |f|
  - f.fields_for :comments, @comment, :url => edit_post_path(@post) do |c|
    = c.label 'Comments'
    = c.text_area :text
    = c.submit 'Submit'

Но я был смущен, потому что там, где не было ошибок, не было текстового поля!

Это потому, что мой контроллер не упомянул один. Поэтому я добавил это к def show

@comment = Comment.new

Та да, теперь работает.

Полный код

Контроллер:

  def show
    @post = Post.find(params[:id])
    @comment = Comment.new

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @post }
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...