我在ruby上有一些方法,可以将一些消息放入控制台。 比我需要将此消息输出到我的html页面。 我使用form_tag获取此方法的数组并将其发送到我的控制器(使用jQuery提交按钮)
<div>
<%= form_tag :testrun, :method => :post, id: 'myForm' do %>
<%= check_box_tag 'testcase[]', :method1 %>
...
<% end %>
<button id="myBtn" class="btn btn-primary">Start</button>
</div>
这是我的HTML页面。 比起我的jQuery脚本,我可以将表单发送给控制器
<script>
$(document).ready(function() {
$('#myBtn').on('click', function() { $('#myForm').submit(); });
});
});
</script>
现在我需要单击“开始”按钮并在其上输出控制台来重绘该页面。我怎样才能做到这一点。 对不起,我的英语:)
那就是我的控制器
class TestRunController < ApplicationController
def new
end
def show
@test = Case.new
testcases = params[:testcase]
testcases.each do |testcase|
@test.send testcase
end
end
end
在routes.rb中,我得到了
Rails.application.routes.draw do
match '/testrun', to: 'test_run#show', via: 'post'
match '/testrun', to: 'test_run#new', via: 'get'
end
show.html.erb
<% provide(:title, 'Test Run') %>
<h1>Test Run</h1>
<p>here will be console.log</p>
<a href="/testrun">New run</a>
日志示例
Started POST "/testrun" for 127.0.0.1 at 2018-08-21 07:12:41 +0300
Processing by TestRunController#show as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"h+zZOjeI4Ou2xiDlr3XOAuOTbNVg2ipS0Y05NoEIq6t5txz/sOjh+Zp4+8ri5TNK7HqDo2RY2mE6QpPtwjnwWg==", "testcase"=>["method1"]}
login successfully
method1 - Success
Rendering test_run/show.html.erb within layouts/application
Rendered test_run/show.html.erb within layouts/application (0.5ms)
Rendered layouts/_shim.html.erb (0.3ms)
Rendered layouts/_header.html.erb (0.7ms)
Rendered layouts/_footer.html.erb (0.6ms)
Completed 200 OK in 9453ms (Views: 31.0ms | ActiveRecord: 0.0ms)
答案 0 :(得分:0)
知道将表单提交的参数发送到控制器操作没有问题,您可以如下更新控制器和视图以显示用户选择的方法的结果:
test_run_controller.rb
class TestRunController < ApplicationController
def show
@test = Case.new
@output = params[:testcase].each_with_object({}) do |method_name, o|
o[method_name] = @test.public_send(method_name)
end
end
end
show.html.erb
<h1>Test Run</h1>
<% @output.each do |method_name, result| %>
<div>
<p><%= method_name %></p>
<p><%= result %></p>
</div>
<% end %>
注意:我使用的是public_send
而不是send
,因为它可以防止您意外调用私有方法。
另请参阅each_with_object
的文档。