ruby-on-rails - Rails 如何在控制器中设置多个多态?
问题描述
Rails 如何在控制器中设置多个多态?
部分代码如下:
问题.rb
has_many :comments, :as => :commentable, :dependent => :destroy
评论.rb
belongs_to :commentable, polymorphic: true
has_many :reports, :as => :reportable, :dependent => :destroy
报告.rb
belongs_to :reportable, polymorphic: true
路线.rb
resources :questions do
resources :comments do
resources :reports
end
然后在_comment.html.erb
:
<%= link_to "<i class='fa fa-times mr2 fa-fw'></i>Report".html_safe,new_question_comment_report_path(@question,@comment),remote: true %>
我的报告控制器.rb
class ReportsController < ApplicationController
before_action :logged_in_user
before_action :set_reportable
def new
@report = @reportable.reports.new
respond_to do |format|
format.html do
redirect_to @reportable
end
format.js
end
end
def create
@report = @reportable.reports.new report_params
@report.reporter_id = current_user.id
if @report.save
redirect_to @reportable
end
end
def destroy
@report = Report.find(params[:id])
@report.destroy
end
private
def set_reportable
if params[:comment_id]
@question = Question.find(params[:question_id])
@reportable = @question.comments.find(params[:comment_id])
end
end
def report_params
params.require(:report).permit(:content,:radio_content)
end
end
new.js.erb 的报告
$("body").append("<%= j render "reports/reports" %>")
$("#tip-offs").modal('show')
我的 _reports.html.erb
<div class="modal tip-offs in" id="tip-offs" >
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button class="close" data-dismiss="modal" type="button">
<span aria-hidden="true">×</span> <span class="sr-only">Close</span>
</button>
<h4 class="modal-title">
<span data-model="action">Report</span>
</h4>
</div>
<%= form_for [@reportable,@report] do |f| %>
<div class="modal-body">
<div class="pbt5">
<%= f.text_area :content,row:3, class: "form-control",placeholder: "report more" %>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" type="button">Close</button>
<%= f.submit "report",class:"btn btn-primary" %>
</div>
<% end %>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
如果评论中的报告网址如:
/questions/6/comments/15/reports/new
我得到错误:
Processing by ReportsController#new as JS
Parameters: {"question_id"=>"6", "comment_id"=>"15"}
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
Question Load (0.2ms) SELECT `questions`.* FROM `questions` WHERE `questions`.`id` = 10 LIMIT 1
Comment Load (0.2ms) SELECT `comments`.* FROM `comments` WHERE `comments`.`commentable_id` = 6 AND `comments`.`commentable_type` = 'Question' AND `comments`.`id` = 15 LIMIT 1
Rendering reports/new.js.erb
Rendered reports/_reports.html.erb (24.4ms)
Rendered reports/new.js.erb (25.8ms)
Completed 500 Internal Server Error in 38ms (ActiveRecord: 0.7ms)
NoMethodError - undefined method `comment_reports_path' for #<#<Class:0x00007fb020559858>:0x00007fb022d02c38>
Did you mean? comment_like_tag:
app/views/reports/_reports.html.erb:13:in `_app_views_reports__reports_html_erb___1071799134587169621_70197237478960'
app/views/reports/new.js.erb:1:in `_app_views_reports_new_js_erb___4579025611719430071_70197237521140'
我想也许我在 set_reportable in set_reportable
in 中有一个错误reports_controller.rb
,如果是,我怎样才能获得正确的报告 url?
非常感谢!
解决方案
NoMethodError - 未定义的方法“comment_reports_path”
你的comments
和reports
都嵌套在下questions
,所以你需要改变
<%= form_for [@reportable,@report] do |f| %>
至
<%= form_for [@question,@reportable,@report] do |f| %>
推荐阅读
- openid-connect - OpenID Connect 不适用于鳄梨酱
- python - 通过 Python 保护工作簿
- javascript - Webpack - postcss-url 和文件加载器
- android - Android glTexSubImage2D 与 GL_TEXTURE_EXTERNAL_OES 问题(OpenGL + OpenCV + CameraX)
- spring - 带redis的弹簧靴
- django - 似乎无法触发 error_message 与 django3 一起显示?
- javascript - 获取功能属性时的传单类型错误
- c - L2 硬件预取器真的有用吗?
- vue.js - 为什么无法识别属性“key”和“vars”
- speech-recognition - 转录期间的分段错误 - DeepSpeech 0.4.1/西班牙语