【问题标题】:Rails dynamic form remote true controller not respondingRails 动态表单远程真控制器无响应
【发布时间】:2014-10-22 03:19:02
【问题描述】:

我正在尝试在联系人页面上建立动态表单。我希望在此页面上显示“添加电子邮件地址”的链接,然后当我单击它时,会出现一个输入电子邮件地址的表单。

所以我使用了一个带有远程 true 的 link_to :

  = link_to "Add an email", add_email_path, id:'link-remote-link', remote: true

在我指定的控制器中:

  def add_email
    render layout: false
  end 

但是当我收到我在 ajax:sucess 上监听的响应时,布局仍然在变量中。但我只想要表格 add_email.html.haml

为了尝试知道我的控制器中的代码是否已执行,我尝试在其中创建一个对象。事实上,它从未被创造出来。

Rails 控制台写着“ContactsController#add_email as JS 处理” "

那么……为什么不执行呢?

谢谢你:)

【问题讨论】:

    标签: javascript jquery ruby-on-rails forms dynamic


    【解决方案1】:

    布局

    我们在application_controller 中设置布局来管理ajax 响应:

    #app/controllers/application_controller.rb
    class ApplicationController < ActionController::Base
       layout Proc.new { |controller| !controller.request.xhr? }
    end
    

    您不妨尝试一下 - 看看是不是您的控制器中的调用正在渲染布局。

    就个人而言,我认为您的 layout: false 调用被控制器的其他一些元素/部分覆盖。我建议检查以确保是这种情况

    --

    控制器

    正如您所说,这种情况可能是您的控制器没有被调用或被正确处理。

    这可能是由许多问题引起的,最明显的是路由不正确,或者其他一些依赖项阻止了方法正确触发。

    为了澄清,我会确保我有以下设置:

    #config/routes.rb
    resources :contacts do
       get :add_email, on: :collection
    end
    
    #app/controllers/contacts_controller.rb
    class ContactsController < ApplicationController
       def add_email
          ...
       end
    end
    

    【讨论】:

    • 如果你想讨论这个,请回复这个评论
    • 这实际上似乎是组织代码的正确方法。无论如何,我不知道这是否是您想告诉我的,但我已将“add_email”操作放在控制器的开头而不是结尾。它神奇地起作用......我真的不明白为什么。
    • 你那里有私有声明吗?
    • 无私有声明
    猜你喜欢
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多