我有这样的控制器
class HomesController < ApplicationController
def index
end
def cheking
@result = params[:type]
respond_to do |format|
format.js
end
end
end
并在index.html.erb
<%= form_tag(checking_path, :remote => true, :format => :js, :method => :get) do %>
<%= select_tag "type", options_for_select([ "admin", "customer" ], "admin") %>
<%= submit_tag "check now" %>
<% end %>
<div id="result"></div>
checking.js.erb
档案
$("#result").html("<%= escape_javascript(render("result")) %>");
我想将@result
放入渲染文件_result.html.erb
<%= @result %>
但提交@result
类型的表单时,admin
不会出现在浏览器中。
日志:
Started GET "/checking?utf8=%E2%9C%93&type=admin&commit=check+now" for 127.0.0.1 at 2014-09-14 01:26:13 +0400
Processing by HomesController#checking as JS
Parameters: {"utf8"=>"✓", "type"=>"admin", "commit"=>"check now"}
Rendered homes/_result.html.erb (0.4ms)
Rendered homes/checking.js.erb (1.1ms)
Completed 200 OK in 5.0ms (Views: 4.8ms | ActiveRecord: 0.0ms)
答案 0 :(得分:1)
在您的checking.js.erb中,您需要传递变量,以便您的部分可以访问它 。你可以这样做:
$("#result").html("<%=j render partial: 'result', locals: {result: @result} %>");
,在您的部分内容中,您需要使用结果
#_result.html.erb
<%= result %>
答案 1 :(得分:1)
为了进一步@mandeep
的努力,让我给你一些关于调试的想法
要调试此应用程序,需要考虑以下三点:
- 你的params是否击中你的控制器?
- 您的数据是否正在被解析&amp;你的回答是否正确呈现?
- 您的回复是否按要求开出?
醇>
<强>调试强>
为了帮助您进行调试,您已向我们提供了一些很好的信息:
Started GET "/checking?utf8=%E2%9C%93&type=admin&commit=check+now"
这非常好,因为这意味着你的:type
param 应该设置(这将是这样的错误的主要关注点)。您可以使用以下方法进一步测试:
#app/controllers/homes_controller.rb
class HomesController < ApplicationController
def checking
Rails.logger.info params[:type]
end
end
假设你的数据正在击中你的控制器,你要做的下一件事就是确保它被解析和放大。您的回答正确呈现。要做到这一点,你需要检查你的JS实际上是否被调用,以及它是否正在触发:
#app/views/homes/checking.js.erb
alert("Firing");
$("#result").html("<%=j render partial: 'result', locals: { render: @render } %>");
#app/views/homes/_render.html.erb
<%= render %>
当您向控制器发送请求时,上述应该触发警报。这将使您能够检查JS是否实际触发,您将能够看到问题所在。
最后,您会想要考虑您正在呼叫的响应。这种结构是否正确?可能是您的语法不正确,从而使您无法调用所需的功能。在这方面,上面的代码应该为你工作