#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. … это для разных степеней работы. Он может зарегистрироваться для создания комментария, но игнорирует текст, потому что вы не разрешили текст комментария. Я предоставил ответ о том, как это сделать.