CommentsController не удается опубликовать комментарий

#ruby-on-rails #ruby #controller #comments

#ruby-on-rails #ruby #контроллер #Комментарии

Вопрос:

Я пытаюсь закодировать блог с помощью Ruby on Rails, я зашел так далеко, чтобы закодировать свой контроллер комментариев, я немного заржавел в Ruby, так что это действительно может быть проблемой (используя старые способы кодирования?).

 def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.build(params.permit[:comment])
  @comment.save

  redirect_to(:back)
end
  

Теперь он действительно работает нормально, но он просто не будет публиковать комментарий, он просто говорит «Отправлено xyz минут назад», но фактически написанное сообщение не отображается на странице после отправки его на сайт. Я не знаю, является ли это проблемой с БД или сбоем кода (даже если это сбой кода ;))!

Если вам, ребята, нужна дополнительная информация о моем коде, просто спросите :)!

Комментарии:

1. вы имеете в виду, что видите некоторые изменения на html-странице, но они не содержат всей желаемой информации? затем также укажите свой view код и new код действия.

2. извините за вопрос: вы имеете в виду под кодом просмотра код с сайта HMTL и где я могу получить новый код действия? Извините, я новичок в rails!

3. Более вероятно, что ваш код работает нормально, но ваши шаблоны не выводят ваш комментарий. Вы можете проверить это, запустив rails console , найдя свой пост и посмотрев, какие комментарии к нему есть. Например: p = Post.find(3) тогда p.comments

4. Спасибо, Алекс, похоже, что он фактически регистрирует комментарии, НО все равно выводит фактический комментарий как «текст: ноль»: загрузка комментария (0,2 мс) ВЫБЕРИТЕ «комментарии».* ИЗ «комментариев», ГДЕ «комментарии».»post_id» = ? [[«post_id», 3]] => #

5. попробовал еще кое-что, но ничего не вышло, все еще выглядит так: abload.de/img/bildschirmfoto2014-063rk00.png

Ответ №1:

У вас есть опечатка в вашем permit звонке, она должна гласить:

 params.permit(comment: :text)
  

Предполагается, что ваша модель комментариев хранит фактический комментарий в body столбце, и ваш params внешний вид выглядит следующим образом:

 { post_id: 42, comment: { text: "..." } }
  

Кроме того, вы должны использовать проверки ActiveRecord и перехватывать недопустимые комментарии, подобные этому:

 def create
  # ...
  if @comment.save
    redirect_to @post
  else
    render :new
  end
end
  

Комментарии:

1. Спасибо, очень полезно, но мой код действительно работает, я изменил его на ваш. Но проблема (как указано выше от Alex) на самом деле является проблемой. БД регистрирует комментарий, но переводит текст в ноль, поэтому я на самом деле понятия не имею, где это изменить сейчас: E!

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