通过sinatra中的html按钮调用Ruby方法

时间:2015-06-18 04:13:02

标签: ruby sinatra

我试图使用Sinatra建立一个电子商务网站,作为实践。我对如何实施“添加到购物车”感到困惑。按钮。我的思考过程是:

  1. 用户点击'添加到购物车'
  2. 按钮'添加到购物车'调用ruby方法,例如单击以下按钮

    <input class='btn btn-primary' type='button' value='Add To Cart'></input>
    
  3. 应该调用像

    这样的ruby方法
    shop.add_to_cart(product, quantity) 
    

    此方法的示例:

        class Shop
          attr_reader :cart
    
          def initialize
            @cart = []
          end
    
          def add_to_cart(product, quantity)
            @cart << product, quantity
          end
        end
    

    在Rails中,我认为我们在控制器中使用helper_method?在Sinatra有什么类似的东西吗?

    谢谢!

3 个答案:

答案 0 :(得分:4)

注意:

如果您想在ruby中执行此操作。您可能也会在其他答案中提到的javascript中执行此操作,但我无法帮助您,因为我不太了解javascript。


要在按钮上单击运行ruby方法,首先需要创建仅包含按钮的<form>,然后在应用程序文件中运行将运行该方法的路径,然后重定向回您所在的页面上。这是我的代码(尚未测试):

home.erb:

<form method="post" action="/runMethod">
    <input type="hidden" name="product" value="whatever">
    <input type="hidden" name="quantity" value="whatever">
    <input class='btn btn-primary' type='submit' value='Add To Cart'>
</form>

您可以根据名称将数量和产品设置为两个隐藏输入的值(我写的&#34;无论什么&#34;)。

应用程序文件:

class Shop
  attr_reader :cart

  def initialize
    @cart = []
  end

  def add_to_cart(product, quantity)
    @cart << product, quantity
  end
end
get '/' do
    erb :home
end
post '/runMethod' do
    shop.add_to_cart(params[:product], params[:quantity])
    redirect '/'
end

答案 1 :(得分:2)

这也可以通过ajax完成,这样你就不必离开页面了:

    $("#hideCarousel").submit(function() {
      //posts the contents of the form to /action using ajax
      $.post("/action", $("#myform").serialize(), function(result){
        // assuming result is a string of the updated data in html
        // and assuming that your data goes in an element with the id data-table
        $("#data-table").html(result)
      });
      return false; // prevents the form from submitting normally
    });

答案 2 :(得分:-2)

Rails / Sinatra在服务器端运行。如果你想直接在Rails中发生的事情你可能需要一个表单和回发数据。 现在人们使用javascript和它的javascript,以异步的方式为这类事情做回调。