Невозможно создавать сообщения в форуме rails на странице тем

Я новичок в рельсах и пытаюсь создать форум. На форуме много тем, темы принадлежат форуму и имеют много микросообщений, а микросообщения принадлежат как темам, так и пользователям. Однако, что бы я ни пытался, сообщения не будут созданы. В настоящее время, когда я пытаюсь опубликовать сообщение, я получаю сообщение об ошибке маршрутизации "Нет маршрута, соответствующего [GET] "/topics""

Мой файл route.rb:

resources :users 
resources :sessions, only: [:new, :create, :destroy]
resources :microposts, only: [:create, :destroy]
resources :forums, only: [:index, :show]
resources :topics, only: [:show]

_micropost_form.html.erb

<%= form_for(@micropost) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
    <%= f.hidden_field :topic_id, value: @topic.id %>
    <%= f.hidden_field :user_id, value: current_user.id %>
    <%= f.text_field :summary, placeholder: "One-line summary..." %>
    <%= f.text_area :content, placeholder: "Compose a new post..." %>
</div>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>

microposts_controller.rb

class MicropostsController < ApplicationController
before_action :signed_in_user, only: [:create, :destroy]
before_action :correct_user, only: :destroy

def create
    #@topic = Topic.find_by_id(params[:topic_id])
    @micropost = current_user.microposts.build(micropost_params)
    if @micropost.save
        flash[:success] = "Your solution has been posted!"
        redirect_to topic_path(@topic)
    else
        redirect_to topic_path(@topic)
    end
end

def destroy
    @micropost.destroy
    redirect_to root_url
end

private

    def micropost_params
        params.require(:micropost).permit(:summary, :content, :user_id)
    end

    def correct_user
        @micropost = current_user.microposts.find_by(id: params[:id])
        redirect_to root_url if @micropost.nil?
    end
end

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


person sw2500    schedule 31.07.2013    source источник


Ответы (1)


В вашем ресурсе :topics вы не определили метод index, поэтому вы не сможете получить доступ к списку тем или странице index. Попробуйте изменить маршрут следующим образом:

resources :topics, only: [:index, :show]

или удалите только атрибут из ресурсов, он автоматически включит все ваши методы по умолчанию.

resources :topics

Также, если у вас есть отношения между моделями, вы должны определить вложенные маршруты в файле маршрутов. Например, вы можете определить их так, вы можете изменить их соответствующим образом:

попробуйте изменить файл маршрута следующим образом:

resources :users 
resources :sessions, only: [:new, :create, :destroy]

resources :forums do
  resources :topics do
    resources :microposts, only: [:new, :create, :destroy]  
  end
end

В приведенном выше случае вы можете получить доступ к своим форумам следующим образом:

 http://localhost:3000/forums

Вы можете получить доступ к своим темам следующим образом:

 http://localhost:3000/forums/id/topics

вы можете получить доступ к своим микросообщениям следующим образом:

 http://localhost:3000/forums/id/topics/id/microposts

Если вы хотите получить доступ к /microposts напрямую, вы должны поместить его вне любого ресурса.

resources :microposts, only: [:index]    

теперь вы сможете получить к нему доступ:

 http://localhost:3000/microposts

Надеюсь, это поможет. Спасибо.

person Rails Guy    schedule 31.07.2013
comment
Спасибо за быстрый ответ, но у меня он все еще не работает :( Сначала я добавил индекс в контроллер маршрутов и тем, но в итоге он просто направил меня на страницу /topics и не сохранил микропост. Кажется например, поскольку он не сохранился, он был просто перенаправлен и на неправильную страницу ... Кроме того, после того, как я изменил файл маршрута и нажал «Отправить», я получил ошибку маршрутизации Нет совпадений маршрута [POST] / microposts- мне нужно сделать больше, чем просто изменить файл маршрута? - person sw2500; 31.07.2013
comment
также удалите опции :only из микросообщений. что он будет перенаправлять на все маршруты. - person Rails Guy; 31.07.2013