2015-10-26 2 views
0

Я пытаюсь быть на этой странице прямо перед оформлением заказа, где вы можете изменить количество и обновить все цены соответственно. Теперь моя кнопка «Обновить» обновляет «что-то», но это не то, чего я пытаюсь достичь, она отправляет меня на страницу show line_items, которую я даже не хочу иметь (я держу ее сейчас, чтобы избежать отсутствующая ошибка шаблона). Документация на рельсы не помогает мне ... ну в любом случае, кодОбновление корзины через кнопку

<ul> 
    <% @cart.line_items.each do |item| %> 
     <%= form_for(item) do |f| %> 
      <li><%= f.number_field :quantity, :value => item.quantity %> x <%= item.product.name %> 
       <%= item.total_price %> </li> 
     <% end %> 
     <%= submit_tag "Update" %> 
    <% end %> 
    <br><strong>Total Price:</strong> <%= @cart.total_price %> 
</ul> 
<%= button_to "Checkout", new_order_path, method: :get, data: { confirm: "Are you sure?" } %> 
<%= button_to 'Empty cart', @cart, method: :delete, data: { confirm: 'Are you sure?' } %> 
<%= link_to 'Back', categories_path %> 

Спасибо!

отредактировал

class LineItemsController < ApplicationController 
    include CurrentCart 
    before_action :set_cart, only: [:create, :update, :destroy] 
    before_action :set_line_item, only: [:show, :edit, :update, :destroy] 

    # GET /line_items 
    # GET /line_items.json 
    def index 
    @line_items = LineItem.all 
    end 

    # GET /line_items/1 
    # GET /line_items/1.json 
    def show 
    end 

    # GET /line_items/new 
    def new 
    @line_item = LineItem.new 
    end 

    # GET /line_items/1/edit 
    def edit 
    end 

    # POST /line_items 
    # POST /line_items.json 
    def create 
    product = Product.find(params[:product_id]) 
    @line_item = @cart.add_product(product.id) 

    respond_to do |format| 
     if @line_item.save 
     format.html { redirect_to @line_item.cart, notice: 'Line item was successfully created.' } 
     format.json { render :show, status: :created, location: @line_item } 
     else 
     format.html { render :new } 
     format.json { render json: @line_item.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /line_items/1 
    # PATCH/PUT /line_items/1.json 
    def update 
    respond_to do |format| 
     if @line_item.update(line_item_params) 
     format.html { redirect_to @cart, notice: 'Line item was successfully updated.' } 
     format.json { render :show, status: :ok, location: @line_item } 
     else 
     format.html { render :edit } 
     format.json { render json: @line_item.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /line_items/1 
    # DELETE /line_items/1.json 
    def destroy 
    @line_item.destroy 
    respond_to do |format| 
     format.html { redirect_to line_items_url, notice: 'Line item was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_line_item 
     @line_item = LineItem.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def line_item_params 
     params.require(:line_item).permit(:product_id, :cart_id, :order_id) 
    end 

end 
+0

Похоже, у вас есть много кода, который вы не понимаете цели. Вы все это скопировали? Вы работаете через учебник или что-то в этом роде? –

+0

Здравствуйте, на самом деле я написал всю эту страницу, даже эту кнопку «Обновить», которую я хотел реализовать. Да, я не совсем понимаю все - я только начал 2 недели назад, и я просмотрел книгу Agile, вот где я получил модельную идею line_items. Вероятно, я бы сказал, что я даже не должен использовать кнопку обновления, а скорее ajax (о чем я не очень люблю). Думаю, я просто понял, что я не должен использовать submit_tag, а скорее кнопку, так как submit отправляет меня на страницу показа. Это все еще не решает мою проблему, но –

ответ

1

Просто переадресовать после обновления элемента. И укажите правильный метод line_item_update_params, который разрешает quantity param. Ваш контроллер должен выглядеть так:

class ItemsController < ApplicationController 

    def update 
    item = Item.find(params[:id]) 
    item.update(line_item_update_params) 

    redirect_to :back # this is the key line of code 
    end 

    ... 

    private 

    # it is used for creating 
    def line_item_params 
    params.require(:line_item).permit(:product_id, :cart_id, :order_id) 
    end 

    # it is used for updating 
    def line_item_update_params 
    params.require(:line_item).permit(:quantity) 
    end 

    ... 

end 
+0

Привет, это открыло мне глаза на то, как работает перенаправление! И теперь я лучше понимаю, что происходит на заднем плане. Спасибо. Но на самом деле это был не вопрос. Реальная проблема заключается в том, что кнопка не обновляет строку - количество и цена. Исследование вокруг я столкнулся с hidden_field_tags, но пока не нашел решения. –

+0

Чтобы помочь вам с вашей проблемой, мне нужно увидеть файл items_controller.rb – chumakoff

+0

эй, я думаю, вы имели в виду контроллер line_items. Я добавил его –

Смежные вопросы