Ruby on Rails:在同一页面上使用用户输入进行计算

时间:2014-01-22 02:11:45

标签: ruby-on-rails ruby user-input

所以,我遇到的问题是我认为是一个非常简单的问题。我不知道如何访问用户输入......或者我不知道如何在rails中声明临时变量。

无论如何,实现这一目标最直接的方法是什么:

    <div>
        Enter Group Size: <%= number_field_tag(:group_size)%>
        Select Study Site: <%= number_field_tag(:site) %>
    </div>
    <% if :site > 4 %>
            Hello!
    <% else %>
            Nope!
    <% end %> 

我想我需要javascript来实际运行,但是现在我只需要知道如何使用这些变量。

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:4)

要使用ERB动态使用它们,需要将它们包装在表单中并提交给服务器。然后,您可以使用params[:variable_name]轻松访问它们。在控制器中准备消息可能会更清晰,但如果您不需要与模型交互,那么使用一些基本的JS来完成所有操作会更直接。

答案 1 :(得分:2)

与大多数事情一样,解决方案涉及的内容更多:


<强>的Ajax

与原生应用不同,Rails依赖于HTTP protocol

HTTP适用于请求。您将请求发送到服务器以呈现网页;服务器响应请求。这样做的问题是你不能在没有向服务器发送请求的情况下使用带有“实时”功能的Rails(即使是“实时”应用程序只是保持永久连接打开,作为单个请求)

这意味着如果您要处理“实时”数据(无需刷新),则必须使用技术代表您发送请求。如您所述,这将是ajax

$(".element").on("action", function(){
    $.ajax({
        url: "your/end/point"
        data: {your: data}
        success: function(data) {
            alert(data)
        }
    });
});

<强>滑轨

要在Rails中处理ajax请求,它与处理HTTP请求基本相同:

#config/routes.rb
resources :controller do
    get :your_endpoint
end

#app/controllers/controllers_controller.rb
def your_endpoint
    # perform actions here
    respond_to do |format|
        format.html
        format.js { # handles JS / Ajax request }
    end
end 

<强>返回

然后,您可以使用JS(Ajax)函数处理返回的数据。这使得图像“实时”工作,但实际上会发送&amp;每次都接收来自服务器的请求