使用其他回复模型的 Rails 多态帖子会导致路由问题



我有一个多态模型帖子,使用户能够对不同的模型发表评论。

并且用户可以在仅包含文本内容的回复模型中回复这些帖子

如果用户想要在"类别"或"主题"页面上留下帖子,则没有问题。但是,如果用户想要回复帖子,则会导致路由问题。

这里有5个模型(类别/主题/帖子/回复/用户)

代码如下

模型

models/category.rb
class Category < ActiveRecord::Base
  has_many :subjects
  has_many :posts, as: :postable
end
models/subject.rb
class Subject < ActiveRecord::Base
  belongs_to :category
  has_many :posts, as: :postable
end
models/post.rb
class Post < ActiveRecord::Base
  belongs_to :user
  belongs_to :postable, polymorphic: true
  has_many :replies
end
models/reply.rb
class Reply < ApplicationRecord
  belongs_to :user
  belongs_to :post
end

控制器:

controller/categories_controller.rb
 def show
    @postable = @category
    @post = Post.new
    @reply = Reply.new
 end
controller/subjects_controller.rb
 def show
    @postable = @subject
    @post = Post.new
    @reply = Reply.new
 end
controller/posts_controller.rb
def create
   @post = @postable.posts.build(post_params)
   @post.user = current_user
  if @post.save
     @post.reload
     redirect_to @postable, notice: "Created"
  else
     render :new
  end
end
controller/replies_controller.rb
  def create
    @reply = @post.replies.build(reply_params)
    @reply.user = current_user     
    if @reply.save
      redirect_to :back
    else
      flash[:alert] = "Sorry, something went wrong."
      render user_path
    end
  end

视图:

views/XXX/show.html.erb
 ....some content of Category or Subject show page...
       <% @posts.each do |post|%>
        <%= link_to post.user.username, post.user %>
        <%= simple_format post.content %>
        <%= render partial: "replies/reply", :locals => {:post => post} %>
       <% end %>  
 view/replies/_reply.html.erb
  <% if post.replies %>
    <% post.replies.each do |reply| %>
      <%= link_to reply.user.username, reply.user %>
      <%= simple_format reply.content %>
    <% end %>
  <% end %>   
  <%= simple_form_for :reply do |r| %>
    <%= r.hidden_field :post_id, value: post.id %>
    <%= r.input :content, label: false  %>   
    <%= r.button :submit, "Submit" %>          
  <% end %>  

我在 route.rb 文件中尝试了几种方法

either
  resources :subjects do
    resources :posts do
      resources :replies
    end
  end  
or
resources :replies 

提交帖子的新回复后,它总是显示以下结果

没有与 [POST] "/subjects/82" 匹配的路由

我的问题是我应该在 route.rb 或其他文件上做什么来解决问题?

您需要像

这样显式地传递url simple_form_for: -

  <%= simple_form_for :reply, :url => your_create_reply_path, :method => :post  do |r| %>
    <%= r.hidden_field :post_id, value: post.id %>
    <%= r.input :content, label: false  %>   
    <%= r.button :submit, "Submit" %>          
  <% end %>   

您可以检查 URL 以通过命令rake routes | grep replies创建回复,并提供方法类型get or post

最新更新