0

我刚开始使用 Web 编程并选择了 Sinatra。我坚持将单选按钮的值从 erb 传递给 post 方法。但是,我可以对文本输入字段执行相同的操作,但无法为单选按钮实现相同的操作。

erb 中的单选按钮来自使用 get 方法中的实例变量创建的数组。请帮助我缺少什么。

这是我的片段。

程序.rb

get '/stop' do
@output = []
IO.popen("lxc-ls --active").each do |line|
  @output << line
end
erb :stop
end

post '/stop' do
@s = params[:tostop]
p @s + "HI"
#IO.popen("lxc-stop -n '#{params[:stop]}'")
end

停止.erb

<form action="/stop" method="post">
<% @output.each do |button| %>
<ul>
<li><input type="radio" name="tostop" value="<%= button %>"><%= button %></li>
</ul>
<% end %>
<input type="submit" name="stop" value="Stop!">
</form>

[更新]

不知何故,我可以传递单选按钮的值,并可以通过执行以下操作来查看该值。

程序.rb

post '/stop' do
"You Selected #{params[:tostop]}"
 IO.popen("lxc-stop -n '#{params[:stop]}'")
end

但是,同样没有传递给 IO.popen("lxc-stop -n '#{params[:stop]}'")。

4

1 回答 1

0

我不确定,但看起来它可能只是一个错字。我认为您正在传递params[:stop]lxc-stop -n命令,而您的意思可能是params[:tostop].

您可能还考虑对输入进行一些清理,因为您正在传递一个有人可以直接伪造给您的操作系统的值......也许确保params[:tostop]它在列表输出中由lxc-ls --active.

于 2013-10-22T20:56:17.497 回答