Ruby on rails 无法在rails论坛的主题页面上创建帖子

Ruby on rails 无法在rails论坛的主题页面上创建帖子,ruby-on-rails,routing,forum,posts,Ruby On Rails,Routing,Forum,Posts,我是rails新手,正在尝试创建一个论坛。论坛有很多话题,话题属于一个论坛,有很多微博客,微博客同时属于话题和用户。然而,无论我尝试什么,帖子都不会被创建。当前,当我尝试发布时,出现路由错误“No route matches[get]”/topics My routes.rb文件: resources :users resources :sessions, only: [:new, :create, :destroy] resources :microposts, only: [:create

我是rails新手,正在尝试创建一个论坛。论坛有很多话题,话题属于一个论坛,有很多微博客,微博客同时属于话题和用户。然而,无论我尝试什么,帖子都不会被创建。当前,当我尝试发布时,出现路由错误“No route matches[get]”/topics

My routes.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_控制器.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
class MicropostsController

正如你所看到的,我注释掉了create函数的第一行,因为我试图根据microspost与主题的关系发布帖子,但没有效果。提前谢谢,如果我发布更多代码,请告诉我是否会有所帮助

在您的
:topics
资源中,您没有定义索引方法,因此无法访问topic的列表或索引页面。尝试按以下方式更改您的路线:

resources :topics, only: [:index, :show]
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
或者只从资源中删除属性,默认情况下,它将自动包含所有方法

resources :topics
此外,如果模型之间存在关系,则应在管线中定义嵌套管线 例如,您可以这样定义它们,您可以相应地更改它们:

尝试按以下方式更改路由文件:

resources :topics, only: [:index, :show]
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
在上述情况下,您可以通过以下方式访问论坛:

resources :topics, only: [:index, :show]
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
您可以访问以下主题:

resources :topics, only: [:index, :show]
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
您可以通过以下方式访问MicroPost:

resources :topics, only: [:index, :show]
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
如果您想直接访问
/microspots
,则必须将其置于任何资源之外

resources :microposts, only: [:index]    
现在,您将能够访问它:

 http://localhost:3000/microposts

希望这会有帮助。谢谢。

谢谢您的快速回复,但它仍然不适合我:(首先,我向路由和主题控制器添加了一个索引,但它最终只是将我指向/topics页面,而没有保存microspost。似乎由于它没有保存,它只是被重定向到了错误的页面……此外,在我更改路由文件并点击submit之后,我遇到了路由错误“No route matches[POST]”/microspost“”-我需要做的不仅仅是更改路由文件吗?删除:也只从MicroPost中删除选项。它将重定向到所有路由。