【问题标题】:Ruby on Rails ajax modal window returning 500 status codeRuby on Rails ajax 模式窗口返回 500 状态码
【发布时间】:2015-12-26 06:15:17
【问题描述】:

我正在尝试学习如何创建自定义模式窗口,但收到错误 500 状态代码。

我认为:views/dashboard/index.html.haml

.container
  - @trips.each do |trip|
    = link_to trip.id, quick_view_trips_path, remote: true
  .quick-view{style: "display:none;"}
    = render "trips/quick_view"

我不确定 quick_view_trips_path 是否正确。我正在尝试在模式窗口中显示旅行的内容。

另外,我还有这些:

views/trips/quick_view.js.erb

$('body').append('<%= j render partial: "views/trips/quick_view" %>');

views/trips/_quick_view.html.haml

.root-container
  = @trip.title
  = @trip.image
  = @trip.more_details      

routes.rb

resources :trips do
  collection do
    get 'quick_view'
  end
end

trips_controller.rb

def quick_view
  respond_to do |format|
    format.html # quick_view.html.erb
    format.js # quick_view.js.erb
    format.json { render json: @trip }
  end
end

编辑:来自控制台的错误

哦,我刚刚意识到,如果我在控制台中点击链接http://localhost:3000/trips/quick_view,我就能看到错误:

上面写着ActionView::MissingTemplate at /trips/quick_view

Missing partial views/trips/_quick_view with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :haml, :jbuilder]}.

【问题讨论】:

  • 你能发布整个 500 错误吗?
  • 您在运行rake routes 时是否将quick_view_trips 视为前缀?
  • @MilesStanfield 它说它缺少模板,但我有 _quick_view.html.hamlquick_view.js.erb
  • render partial: "trips/quick_view"
  • @RajarshiDas 哇!我做到了!!呜呜谢谢!将正确的行程数据发送到模型的正确方法是什么?我不确定quick_view_trips_path 的原因是,这似乎是一个静态 url 页面

标签: jquery ruby-on-rails ajax ruby-on-rails-4 modal-dialog


【解决方案1】:

您可以尝试render partial:而不是render,因为您的视图是_quick_view.html.haml而不是quick_view.html.haml

.container
  - @trips.each do |trip|
    = link_to trip.id, quick_view_trips_path, remote: true
  .quick-view{style: "display:none;"}
    = render partial: "trips/quick_view"

并且在js中不需要views作为

  $('body').append('<%= j render partial: "trips/quick_view" %>');

如果你想获取特定模式的内容并像这里一样替换它,每次点击都会将每次旅行快速视图添加到正文,每次点击链接remote: true它将调用控制器方法,这将以js 的格式响应,因此它将调用quick_view.js.erb 并通过获取部分来附加行程。

所以这里

link_to trip.id, quick_view_trips_path, remote: true

将调用 trips/quick_view.js.erb,因为它告诉 ajax 请求由 remote: true 响应

所以在quick_view.js.erb

我们通过 jQuery 方法 appendbody 中附加 partial 并使用 j render 其中 jescape_javascript 用于“为 JavaScript 段转义回车和单引号和双引号”(引用来自 Rails 文档)

【讨论】:

  • 这是错误的 JS 文件...应该是 trips/quick_view 而不是 views/trips/quick_view。但是,在我接受这个答案之前,您认为您可以看到将动态内容传递到模态框的正确方法是什么?
  • 是的,我更新了...我真的很高兴在圣诞节帮助你:))
  • 问个简单的问题:你能解释一下将要传递的动态内容吗?这可能对其他人也有帮助
  • 是的,你的意思是 js 渲染你的局部这个?
  • 是的,所以因为我在 .each 循环中有动态行程,如果用户点击某些链接,它应该根据用户点击的链接填充模式,以及我将如何显示内容?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 2012-06-06
  • 2015-08-14
  • 2017-03-18
相关资源
最近更新 更多