Rails根据用户输入动态更新View

时间:2013-07-12 16:28:05

标签: javascript jquery html ruby-on-rails ajax

我正在尝试创建一个视图页面,用户在文本字段中输入Item对象的名称,或者jquery标记字段(http://loopj.com/jquery-tokeninput/

每个项目都有一个费用属性,我想在用户添加项目时动态显示总费用,而无需刷新。

所以在页面顶部会有:

“总费用:150美元”,或“总费用:120美元”,如果您删除价格为30美元的商品。

我觉得这会涉及到javascript和AJAX,但我对它并不十分熟悉。请指教,谢谢!

2 个答案:

答案 0 :(得分:1)

好的,这是一个复杂的问题,但我会尽力帮助你,我会首先将该文本字段添加到表单中,如下所示:

show.html.erb:

<%= form_tag({:controller => "cart_items", :action => :create}, {:method => :post, :remote => true}) do %>                    
    <%= text_field_tag :product_name, product.name %>                          
<%end%>     

注意:remote =&gt;如果强制rails执行ajax调用,则为true

之后在你的控制器中你将需要处理该请求,所以会是这样的:

def create     
    if @current_cart==nil
      @current_cart = Cart.create!
      @current_cart.save
      session[:cart] = @current_cart.id
    end
    @product = Product.find_by_name(params[:product_name])
    @current_cart.add(@product, @product.price)      
    respond_to do |format|
      format.js {redirect_to :back, :notice => "added"}
      format.html {redirect_to :back, :notice => "added"}
    end    
  end

之后你需要一些javascript来处理这样的ajaxt响应:

show.js.erb:

$('.cart').replaceWith('<%= j render :partial => "layouts/cart"%>');

你需要一个替代的购物车:

布局/ _cart.html.erb:

<%@current_cart.each do |c| %>
 <%=c.product.name%>
<%end%>
我只是快速回答表面,但也许你会发现一些方向 欢呼声

答案 1 :(得分:0)

有兴趣看到相关的视图代码,但一般来说,您只需将各个内容添加到一起即可获得总数。

如果您需要获取文本字段的值,可以使用.val()并将其转换为int或float,您可以使用parseInt(string)parseFloat(string)