通过create而不是update进行处理

时间:2016-01-03 15:46:21

标签: ruby-on-rails

当我尝试运行我的代码时,我收到了上面的错误。 我尝试向我的产品添加特定属性,但每次我尝试将它们添加到我的产品时,都会创建一个新的,而不是仅编辑旧的。

结果如下:

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 

我的产品_控制器:

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在表单中添加具有正确:my_product_id值的字段:

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

如果您在没有参数的情况下使用base请求调用GET操作,则会创建新对象,对于更新,您必须传递给此操作参数my_product_id=valuevalue是{已更新产品的{1}}。