我搜索了许多其他帖子,但没有任何帮助我。所以我实现了一个多态的评论函数,这样每个人都可以评论每条评论。我的问题是,如果我创建一个评论,他就会要求一个show方法。
我的日志显示
<properties>
<owner>XYZ</owner>
</properties>
我的routes.rb
Started POST "/comments/59/comments" for 127.0.0.1 at 2018-01-07 21:15:40
+0100
Processing by CommentsController#create as HTML
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ?
ORDER
BY "users"."id" ASC LIMIT ? [["id", 1], ["LIMIT", 1]]
Comment Load (0.0ms) SELECT "comments".* FROM "comments" WHERE
"comments"."id" = ? LIMIT ? [["id", 59], ["LIMIT", 1]]
(0.5ms) begin transaction
Comment Load (0.0ms) SELECT "comments".* FROM "comments" WHERE
"comments"."id" = ? LIMIT ? [["id", 59], ["LIMIT", 1]]
SQL (1.0ms) INSERT INTO "comments" ("body", "created_at", "updated_at",
"user_id", "commentable_id", "commentable_type") VALUES (?, ?, ?, ?, ?, ?)
[["body", "huihuihuihuihuihio"], ["created_at", "2018-01-07
20:15:40.254229"], ["updated_at", "2018-01-07 20:15:40.254229"],
["user_id", 1], ["commentable_id", 59], ["commentable_type", "Comment"]]
(89.3ms) commit transaction
(0.0ms) begin transaction
(0.0ms) commit transaction
Redirected to http://localhost:3000/comments/60
Completed 302 Found in 118ms (ActiveRecord: 91.3ms)
Started GET "/comments/60" for 127.0.0.1 at 2018-01-07 21:15:40 +0100
AbstractController::ActionNotFound (The action 'show' could not be found
for CommentsController):
我的comments_controller.rb
resources :posts do
resources :comments
end
resources :comments do
resources :comments
end
我的评论.rb
class CommentsController < ApplicationController
before_action :find_commentable
def new
@comment=Comment.new
end
def create
@comment =@commentable.comments.create(params[:comment].permit(:name, :body).merge(user: current_user))
if @comment.save
redirect_to comment_path(@comment), notice: 'Dein Kommentar wurde gespeichert'
else
redirect_to comment_path(@comment), notice: 'Dein Kommentar konnte leider nicht gespeichert werden, ueberpruefen sie ihre Eingaben'
end
end
private
def find_commentable
@commentable = Comment.find_by_id(params[:comment_id]) if params[:comment_id]
@commentable = Post.find_by_id(params[:comment_id]) if params[:post_id]
end
end
说实话,我在删除帖子和posts_controller.rb方面遇到同样的问题。我已经修复了#34;它给show方法提供了与我的delete方法相同的代码。 因此,如果您有想法或需要更多代码,请告诉我
修改 的 Post.rb
class Comment < ApplicationRecord
belongs_to :commentable, polymorphic: true
belongs_to :user
has_many :comments, as: :commentable
end
Post_controller
class Post < ApplicationRecord
belongs_to :user, optional: true
has_many :comments, as: :commentable, dependent: :destroy
validates :title, presence: true, length: {minimum: 5}
validates :body, presence: true
has_attached_file :image #, :styles => { :medium => "300x300>", :thumb =>
"100x100>" }
validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/
end
答案 0 :(得分:0)
您的评论控制器中没有AsyncTask
操作,但您说show
要求服务器提供默认路径“/ comments / 60”。您为路由提供了资源,因此服务器期望该路由等于show动作。您应该查看所有路线,以便更好地了解正在发生的事情。约定优于配置的想法是假设这些默认值,直到您覆盖它们。当你redirect_to comment_path(@comment)
时,你期望发生什么?
在浏览器中尝试使用此路径,插入您的应用名称:
redirect_to comment_path(@comment)
这将显示服务器的期望。如果需要解释,可以将结果添加到您的问题中。但基本上您需要将该操作添加到控制器,或者告诉控制器在操作完成时呈现其他内容。在该行动完成后你想看到什么?
如果您不想进行http://localhost/your_app_name/rails/info/routes.
操作,可以执行以下操作:
show
从下面可以清楚地看出,您的Post Controller没有redirect_to post_path(@comment.commentable_id)
动作。从您添加的代码中可以看出您已完成此操作?另外,如果上面提到的show
无效,因为没有与redirect...
关联的post_id
,那么您还有其他更深层次的问题。大多数问题都源于你使用标准的东西,比如
@comment
然后做非标准的事情,比如没有每个控制器的标准CRUD操作。是的,你可以跳过你不需要的东西,但Rails的重点是通过约定优于配置来帮助简化事情。
修改强>
将resources :posts do
resources :comments
end
更改为post_id
,因为这是代码中引用的方式。这可能有效,但由于您允许对评论发表评论,因此可能不会。基本上,如果评论属于属于Post的评论,那么您必须向上遍历该树,或者只是像您选择的那样转到索引页面。