【问题标题】:Rails Request Formatting as JS, Need Request to Look for Regular Rails TemplateRails 请求格式为 JS,需要请求寻找常规 Rails 模板
【发布时间】:2016-09-08 22:13:42
【问题描述】:

我正在尝试通过使用 javascript 的 #new 操作在 rails 部分呈现引导模式(语法是苗条的模板,只是更清洁的 erb)。

= link_to 'ADD NEW', new_hiring_site_path, {:style=>'color:#FFFFFF;', data: { toggle: "modal", target: "#hiring_site_modal"}}

这是#new 动作呈现的部分内容:

#hiring_site_modal.modal.fade tabindex="-1" role="dialog" data-backdrop="static" data-keyboard="false"
  .modal-dialog
    .modal-content
      .modal-header
        #hiring_site_modal_header.h4.modal-title
      .modal-body.address-section
        .form-group.hidden
          input type="hidden" id="hiring_site_id" name="hiring_site_id" value='0'
        .form-group
          label for='hiring_site_address_line_1' Address Line 1
          input.form-control.input-lg.address_line_1.required.input-length-long type="text" id='hiring_site_address_line_1' name='hiring_site_address_line_1'
...

这是我的控制器操作:

def new
  @site = HiringSite.new({})

  respond_to do |f|
    f.html
  end
end

现在,当我提交这样的请求时,我得到的响应是:

[Request Summary] {:method=>"GET", :path=>"/hiring_sites", :format=>:html, :controller=>"HiringSitesController", :action=>"index", :status=>200, :duration=>2083.21, :view=>1979.28, :db=>2.84, :application=>"enrollment-rails-app", :rails_env=>"development"

当我在链接助手中将路由更改为 html 格式时:

= link_to 'ADD NEW', new_hiring_site_path(format: 'html'), {:style=>'color:#FFFFFF;', data: { toggle: "modal", target: "#hiring_site_modal"}}

然后客户端最终会寻找一个 new.html 文件。你知道我是如何得到这个来生成渲染模板的默认控制器响应的吗?

或者我应该坚持打高尔夫球。

【问题讨论】:

  • 我不确定我是否正确理解了您的问题,您的意思是:“我如何让它生成渲染特定部分的默认控制器响应?” :render partial: "partial_name"
  • 如何让它生成寻找我的模板而不是寻找 JS 或 .html 的响应
  • 您的模板(部分视图)是用 HTML 编写的。它的文件名是什么?我个人不使用 slim,但一些快速搜索告诉我,您的部分名称应该是“partial_name.html.slim”。您应该有一个 gem 可以在运行时自动将 slim 文件转换为适当的 HTML 文件(Rails 带有 ERB 支持,但您需要通过 gem 添加 Slim 支持)。这意味着 Rails 将在运行时查找并找到“partial_name.html”。

标签: javascript ruby-on-rails twitter-bootstrap


【解决方案1】:

按照 Rails 约定,当您调用控制器操作时,Rails 将通过自动尝试 render 同名的视图模板(位于与控制器同名的视图文件夹中)来结束它。在您的情况下,调用#new 控制器操作会导致rails 尝试render new.html 视图模板。

如果您希望您的控制器对render 执行不同的视图模板,请使用render "template_name" 函数执行此操作。如果您希望控制器操作呈现局部视图模板,请使用 render partial: "partial_name" 函数。

在您的示例中,您希望 #new 操作呈现特定部分,因此您希望以 render partial: "partial_name" 结束您的 #new 操作

(为了清楚起见——因为您问过如何让 Rails 呈现模板:new.html 是视图模板)

有关使用 Rails 的 render 函数的更多信息,请参阅“Rails 中的布局和渲染”Rails 指南:http://guides.rubyonrails.org/layouts_and_rendering.html#using-render

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2013-02-16
    • 2015-07-12
    • 2013-01-17
    • 1970-01-01
    • 2021-07-11
    • 2018-01-21
    相关资源
    最近更新 更多