【问题标题】:Ruby on Rails link middle clickRuby on Rails 链接中键单击
【发布时间】:2015-08-12 06:37:12
【问题描述】:

我的项目中有多个链接,例如:

_index.html.erb:

<%= link_to('New Project', new_project_path, :remote => true) if Project.create_authorized? %>

控制器:

def new
  @project = Account.root_account.nil? ? Project.new : Account.root_account.projects.new
end

new.js.erb:

$("#right-panel").html("<%= escape_javascript(render(:partial => 'projects/form', :locals => {:project => @project}) ) -%>");

我的问题是,当我在链接上单击鼠标中键(我的意思是,我想打开一个新选项卡)时,它会引发错误:

模板丢失缺少模板项目/新,应用程序/新 使用 {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee, :arb]}。搜索:* “/home/raj/workspace/papayaheaderlabs.banana/app/views”* “/home/raj/.rvm/gems/ruby-2.0.0-p598@banana/gems/doorkeeper-2.2.1/app/views” *“/home/raj/.rvm/gems/ruby-2.0.0-p598@banana/bundler/gems/activeadmin-655e2be7a351/app/views” * "/home/raj/.rvm/gems/ruby-2.0.0-p598@banana/gems/kaminari-0.16.3/app/views"

请帮忙解决这个问题

【问题讨论】:

  • 根据错误,正在发出的请求是html格式,如错误:formats=&gt;[:html]所示,因此它正在搜索new.html.erb文件。当您期待js 请求时。尽管我认为您正确添加了remote: true,这应该与js 请求一起使用。我建议请查看是否正在发出 ajax 请求。
  • 检查无效的 html 或 js 错误也可能是值得的......
  • 我相信您实际上是想复制当前选项卡并在复制的选项卡中执行相同的 js new.js.erb 对吧?问题在于鼠标中键单击可能是特定于浏览器的,用户始终可以通过配置或插件覆盖默认行为。所以你应该按照 S. Tulentsev 的建议创建一个 new.html.erb

标签: ruby-on-rails


【解决方案1】:

要修复您的错误,您必须提供缺少的模板。在这种情况下,它似乎是views/projects/new.html.erb

new.js.erb(由remote: true 调用)提供的部分更新在新页面的上下文中没有意义。没有现有页面可以更改部分内容! (特别是不会有#right-panel

所以你必须在这里渲染一个完整的页面,包括页脚、标题导航,以及所有这些东西。

【讨论】:

    【解决方案2】:

    经过长时间的谷歌搜索,我找到了与我的问题相关的唯一一个答案,即 我只需要做一件事,即禁用中键单击和右键单击链接。因为,我有实际发送 js(java-script)请求并呈现 js.erb 页面(可用)的链接。但是如果右键单击或中键单击链接,它会发送 html 请求并且没有页面为 html.erb 找到,这就是为什么它会引发错误为“模板丢失”。

    所以,唯一的选择是:禁用中键单击和右键单击

    【讨论】:

    • 您能分享一下您是如何禁用中键/右键的吗?
    【解决方案3】:

    您的链接看起来正确,请检查您是否添加了

    //= require jquery_ujs
    

    在 application.js 文件中

    如果不包含 jquery_ujs :remote => true 将不起作用。 请求以 html 格式进行,正在搜索 new.html.erb 模板

    【讨论】:

    • 这不是问题所在。
    • 这不是相关的答案兄弟,我的问题是如何处理这个“模板丢失错误”,这样就不会通过错误消息
    • 我的意思是,如果 remote => true 不起作用,它将搜索 new.html.erb 模板,因此请确保 remote true 正在工作并且它将响应 new.js.erb并且您不会收到“模板丢失错误”
    • @Pushpalata:它正在工作。只是不在空白页上。
    • Pushpalata mam 工作正常,但如果中键单击链接以打开新标签,则会引发错误:“模板丢失”
    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多