Rails игнорируя рендер и redirect_to - PullRequest
5 голосов
/ 22 октября 2008

У меня здесь очень простой вопрос о рельсах, но я не могу найти ответ нигде. Я предполагаю, что некоторые проблемы возникли у меня после изучения руководства по Rails 1.2 с Rails 2.1. Во всяком случае ..

Я пишу блог-систему и немного внедряю комментарии. У меня есть комментарии, которые отображаются нормально после того, как я создал их с помощью скрипта / консоли, но получить саму форму комментария очень сложно.

В posts_controller.rb у меня есть

  def comment
    Post.find(params[:id]).comments.create(params[:comment])
    flash[:notice] = "Added comment"
    #render :action => show
    redirect_to :action => show
  end  

и в show.html.erb (просмотр) у меня есть

<%= form_tag :action => "comment", :id => @post %>
  <%= text_area "comment", "body" %><br>
  <%= submit_tag "Post Comment" %>

Когда я отправляю форму, она пытается перейти по адресу urb / posts / comment / 1, что явно неверно, и жалуется, что не может найти шаблон. Очевидно, я не хочу, чтобы там был шаблон, потому что я сказал ему перенаправить на действие show, потому что я хочу, чтобы он просто повторно отображал страницу показа сообщения с новым комментарием там.

Я пробовал и закомментированную строку (render: action => show), и строку redirect_to, но ни одна из них, похоже, ничего не делает.

Я уверен, что упускаю что-то простое, но что это?

Ответы [ 3 ]

8 голосов
/ 22 октября 2008

Работает ли redirect_to :action => 'show', :id => params[:id] с кавычками вокруг шоу?

0 голосов
/ 22 октября 2008

Rails 2.1 включает в себя "RESTful resources". show просто является именем одного из предопределенных действий REST, которые используют все контроллеры rails.

Rails делает некое волшебство за кулисами, и: show эквивалентно «отображению этого одного конкретного элемента с определенным заданным идентификатором». Похоже, что это смешивается с этим. Идентификатор, вероятно, по умолчанию равен 1. Отсюда сгенерированный URL, который вы видите при вызове рендеринга

В Rails 2.1 для этого используются следующие действия и шаблоны:

  • index - отображает полный список комментариев
  • create - добавить новый комментарий
  • show - отображать только определенный комментарий (не полный список). Не похоже, что это то, что вы хотите, но "магия" внутри рельсов по умолчанию будет иметь значение.

Существуют также действия для new (показать представление для ввода нового комментария) edit (показать представление для редактирования существующего комментария) update (обработать отправку обновления) и destroy (дух) , но похоже, что вы не использовали бы их в этом примере.

У вас есть ссылка на учебник? Не будет слишком сложно перенести его в стиль Rails 2.1.

0 голосов
/ 22 октября 2008

да, вы используете старый стиль рельсов.

Что-то новое:

   form_for :comment, :url => { :post_id => @post } do |f|
     f.text_area :body
     submit_tag "Post"
   end

Вы можете использовать ресурсы для постов и комментариев, искать в Google для лучшего учебника или установить рельсы 1.2.6:

gem install -v 1.2.6 rails
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...