我试图使用Sinatra建立一个电子商务网站,作为实践。我对如何实施“添加到购物车”感到困惑。按钮。我的思考过程是:
按钮'添加到购物车'调用ruby方法,例如单击以下按钮
<input class='btn btn-primary' type='button' value='Add To Cart'></input>
应该调用像
这样的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有什么类似的东西吗?
谢谢!
答案 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,以异步的方式为这类事情做回调。