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