2016-01-03 49 views
0

當我嘗試運行我的代碼時,我得到了上述錯誤。 我嘗試將特定屬性添加到我的產品中,但每次嘗試將它們添加到我的產品時,都會創建一個新的屬性,而不是隻編輯舊的。通過創建而不是更新來處理

下面是結果:

Started POST "/my_products" for 127.0.0.1 at 2016-01-03 16:33:46 +0100 
[localhost] [127.0.0.1] [a6533ae8-475f-4e] Processing by MyProductsController#create as JS 
[localhost] [127.0.0.1] [a6533ae8-475f-4e] Parameters: {"utf8"=>"✓", "my_product"=>{"size_name"=>"Gros oeuf", "size_img"=>"big-egg.png", "size_price"=>"40"}, "commit"=>"Choisir"} 
[localhost] [127.0.0.1] [a6533ae8-475f-4e] (0.2ms) BEGIN 
[localhost] [127.0.0.1] [a6533ae8-475f-4e] SQL (0.3ms) INSERT INTO `my_products` (`size_name`, `size_price`, `size_img`, `created_at`, `updated_at`) VALUES ('Gros oeuf', '40', 'big-egg.png', '2016-01-03 15:33:46', '2016-01-03 15:33:46') 
[localhost] [127.0.0.1] [a6533ae8-475f-4e] (2.0ms) COMMIT 

我application_controller.rb:

def current_product 
    if !session[:my_product_id].nil? 
     MyProduct.find(session[:my_product_id]) 
    else 
     MyProduct.new 
    end 
end 

我Products_controller:

def base 
    @myproduct = current_product 
    @size = Size.all 
    @chocolate = MyProductItem.where(item_category_id: 1) 
end 

def create 
    @myproduct = current_product 
    if @myproduct.update(my_product_params) 
     redirect_to(:back) 
    else 
     render 'new' 
    end 
end 

我base.html.erb:

<% @size.each do |size| %> 
<div class="Box" > 
    <p><%= size.name %></p> 
    <p><%= image_tag size.image, style: 'width:7em;height:auto;' %></p> 
    <p><%= number_to_currency size.price %></p> 
    <p><%= size.description.try(:html_safe) %></p> 
    <%= form_for @myproduct, remote: true do |f| %> 
     <%= f.hidden_field :size_name, value: size.name %> 
     <%= f.hidden_field :size_img, value: size.image %> 
     <%= f.hidden_field :size_price, value: size.price %> 
     <%= f.submit "Choisir", class: "addtocart", :id => "#orders" %> 
    <% end %> 
</div> 
<% end %> 

我的模型:

class MyProduct < ActiveRecord::Base 
    attr_accessible :name, :slug, :price, :image, :my_product_item_id, :user_id, :size_name, :size_img, :size_price 
    has_many :elements, dependent: :destroy 
    has_one :size, dependent: :destroy 
    belongs_to :user 
    belongs_to :order 

class Size < ActiveRecord::Base 
    attr_accessible :name, :price, :weight, :image, :description, :object_size 
    belongs_to :my_product 
end 

任何想法?

<%= hidden_field_tag(:my_product_id, @my_product.id) if @my_product %> 

如果調用base行動GET要求不帶參數的新對象將被創建,用於更新你必須通過這個動作參數my_product_id=valuevalue是:

+0

我的猜測是'session [:my_product_id]'不存在,您需要調試此操作,在'current_product'方法中添加一個打印以檢查會話所有的鍵值對。 – goromlagche

+0

我做了「<%= session.inspect%>」但是有這麼多的信息,有沒有更清晰的方法? –

+0

我認爲@Mareq回答了你的問題。 – goromlagche

回答

1

適當:my_product_id值到表單中添加字段更新產品的id)。

+0

它不工作:「未定義的方法'ID爲零:NilClass」 –

+0

謝謝,但我得到了同樣的錯誤:「參數:{「utf8」=>「✓」,「my_product」=> {「my_product_id」=>「」 –

+0

@TimothéGauguet剛剛更新了我的答案... – Mareq

相關問題