Rails: ошибка маршрутизации, модель комментария к модели микросообщений - PullRequest
0 голосов
/ 27 февраля 2012

Я создал систему комментирования и пытаюсь опубликовать ее под микросообщением, но постоянно получаю эту ошибку маршрутизации.Какие-либо предложения?Вся помощь очень ценится!

Routing Error

No route matches [POST] "/microposts/comments"

Форма

<div class="CommentField">
<%= form_for ([@micropost, @micropost.comments.new]) do |f| %>
<%= f.text_area :content, :class => "CommentText", :placeholder => "Write a Comment..." %>
<div class="CommentButtonContainer">
<%= f.submit "Comment", :class => "CommentButton b1" %>
</div>
<% end %>
</div>

контроллер комментариев

class CommentsController < ApplicationController 
  def create
    @micropost = Micropost.find(params[:micropost_id])
    @comment = @micropost.comments.build(params[:comment])
    @comment.user_id = current_user.id
    @comment.save 
      respond_to do |format|
      format.html 
      format.js
    end
  end

end

маршруты

resources :microposts do
  resources :comments
end

Модель микросообщения

class Micropost < ActiveRecord::Base
  attr_accessible :title, :content, :view_count
  acts_as_voteable
  belongs_to :user
  has_many :comments
  has_many :views
  accepts_nested_attributes_for :comments
end

Контроллер пользователя

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    @school = School.find(params[:id])
    @micropost = Micropost.new
    @comment = Comment.new
    @comment = @micropost.comments.build(params[:comment])
    @microposts = @user.microposts.paginate(:per_page => 10, :page => params[:page])
  end
end

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Причина, по которой вы получаете ошибку, состоит в том, что вы пытаетесь создать форму для comments из micropost, который еще не существует в базе данных.

форма, существует-

   form_for ([@micropost, @micropost.comments.new]) do |f|

А в UsersController у вас есть -

  @micropost = Micropost.new

комментарий - это подресурс микросообщения, поэтому URL, который создает комментарий, должен выглядеть как /micropost/:id/comments где: idэто идентификатор микросообщений.Это возможно только после того, как микросообщение сохранено.

Поэтому я считаю, что ваше действие должно назначить @micropost существующему сообщению или создать его прямо там, чтобы форма работала.Что-то вроде -

   @micropost = Micropost.last || Micropost.create

хотя бы избавит от ошибки.

0 голосов
/ 27 февраля 2012

Я попробую это снова (удалил мой другой ответ, поскольку, как отметил Марк Талбот, неправильный ответ на ваш вопрос) .

Возможно, проблема настолько простакак :microposts быть :micropost вместо (чтобы отразить название вашей модели) .

resources :micropost do
  resources :comments
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...