使用Ajax的非常简单的单页rails有什么问题?

时间:2013-07-01 15:36:26

标签: javascript ruby-on-rails ajax ruby-on-rails-3.2

想要创建一个单页网站,有一个输入文本字段,用户将输入一个数字,然后提交按钮将在同一页面上输出一些基于我用Ruby编写的算法的字符串。

我创建了控制器main_pages_controller.rb,其中“home”作为与“home.html.erb”视图关联的方法,而部分显示输出“_goclick.html.erb”。在主页home.html.erb我已经把这段代码:

Number: <input type="text" name="input_number">
<%= link_to "click here", {:action=>"go_convert"}, {:remote => true, :id=>"clk"} %>
<div id="allclick">
<%= render :partial => 'goclick' %>
</div>

在控制器中我添加了一个名为go_convert的方法,我在其中嵌入了用于转换的ruby代码。并用这些行结束了方法

respond_to do |format|
        format.js { render :layout=>false } 
end

我还使用此代码在相同的views文件夹下添加了一个js文件(go_convert.js.erb)

$("#allclick").html("<%= escape_javascript(render(:partial => "goclick")) %>");

我已将方法go_convert添加为路径配置文件的后置路由 当我点击“点击此处”链接时出现js错误

http://localhost:3000/main_pages/go_convert 404 (Not Found)

所以我也将此路线添加到我的路线文件

get "main_pages/go_convert"

现在点击“点击此处”链接时,没有任何事情发生,没有输出,没有页面重新加载,没有javascript错误.. 我究竟做错了什么? 我使用rails 3.2.12和Ruby 1.9.3

3 个答案:

答案 0 :(得分:1)

您应该创建一个javascript脚本,这个脚本将由您的控制器操作返回,如下所示:

在您的控制器操作中

def your_action
  @result = (your algorithm output)
  respond_to do |format|
    format.js { render :action => "result" }
  end
end

在文件result.js.erb

$('#allclick').empty().append('<%= escape_javascript( @result.to_s ) %>');

result.js脚本将呈现为对ajax请求的响应!

答案 1 :(得分:1)

为什么使用link_to而不是表单?除非你手动处理,我不认为“text_number”输入字段值根本没有发送..

也许这就是原因?所以它呈现部分而没有任何与初始条件相同的结果。

无论如何尝试使用远程表单,如下所示:

<%= form_tag url_for(action: "show"), remote: true do %>
  Number: <input type="text" name="input_number">
  <%= submit_tag "click here" %>
<% end %>
<div id="allclick">
  <%= render :partial => 'goclick' %>
</div>

你得到的“未找到”错误可能是link_to使用GET请求的结果,通过使用默认使用POST请求的表单,你根本不需要添加GET路由

答案 2 :(得分:0)

根据您的路线,我认为这是一个拼写错误,您的 main_page_controllers.rb 应为 main_pages_controller.rb