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

Rails dynamically updated View based on user input

本文关键字:动态 更新 View 输入 用户 Rails      更新时间:2023-09-26

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

每个项目都有一个成本属性,每当用户添加项目时,我想显示总成本动态,而不刷新。

所以在页面的顶部会有:

"总成本:150美元",或者如果删除一个成本为30美元的项目,则为"总成本":120美元。

我觉得这会涉及javascript和AJAX,但我不是很熟练。请建议,谢谢!

好的,这是一个复杂的问题,但我会尽我所能帮助你,我建议首先将该文本字段添加到表单中,类似于以下内容:

show.html.erb:

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

注意:remote=>true强制rails执行ajax调用

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

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 parcial来替换:

layouts/_cart.html.erb:

<%@current_cart.each do |c| %>
 <%=c.product.name%>
<%end%>

我只是粗略地回答了一下,但也许你会找到一些方向欢呼

会对查看相关的视图代码感兴趣,但通常情况下,您只需将内容相加即可获得总数。

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