1

想要创建一个单页网站,有一个输入文本字段,用户将在其中输入一个数字,然后一个提交按钮将在同一页面上输出一些基于我用 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

我还使用此代码在同一视图文件夹下添加了一个 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

4

3 回答 3

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 请求的响应!

于 2013-07-01T15:43:55.580 回答
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 路由

于 2013-07-02T09:37:21.447 回答
0

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

于 2013-07-01T15:48:22.627 回答