Ruby on Rails根据帖子数据保存数据库记录

时间:2014-02-26 22:40:56

标签: html ruby-on-rails ruby sqlite post

过去6个小时我一直在玩这个,我实在无法解决。我是铁杆上的红宝石新手。我有一个产品,我已经添加了一个购买模型。现在,我希望每个产品旁边都有一个“购买”键,将其添加到我的购买数据库中。这是我的购买控制器:

class PurchasesController < ApplicationController                                  
    def new
    end
    def update
    end
    def create
            @purchase = Purchase.new(purchase_params)
            if Purchase.save
                    redirect_to products_path notice: 'Product bough'
            else
                    redirect_to products_path notice: 'Error!!!'
            end

    end
    private
    def purchase_params
            params.require(:product).permit(:amount,:product_id)
    end

购买按钮:

<td><%= link_to 'Buy',purchases_path(product.attributes), method: :post %></td>

那是在<% @products.each do |product %>之内。现在我真的想知道如何发送product_id然后将其保存在我的购买数据库中。我一直有各种各样的错误! 像parameter not found: productundefined method允许'for“8”:字符串8 is the product id and方法保存未定义...`。我想我真的不知道我在这做什么!关于如何手动将数据保存到数据库的一些帮助或教程将不胜感激。 (通过手动我的意思是输入哪个已发布的字段保存为哪个col)

2 个答案:

答案 0 :(得分:0)

您应该@purchase.save,而不是Purchase.save

答案 1 :(得分:0)

这样的事情应该是你的观点。

<% @products.each do |product| %>
<td><%= product.amount %><td>
<td><%= form_for @product, url: {action: "create"}, html: {method: "post"} do |f| %>
  <%= f.hidden_field_tag :id,product.id%>
  <%= f.hidden_field_tag :amount,product.amount%>
  <%= f.submit "Create" %>
<% end %></td>
<% end %>

您的控制器应如下所示:

def create
  @purchase = Purchase.new(purchase_params)
  if @purchase.save
    redirect_to products_path notice: 'Product bough'
  else
    redirect_to products_path notice: 'Error!!!'
  end
end

def purchase_params
  params.require(:product).permit(:amount,:id)
end

我不确定您为什么不使用该表单。这是为什么?无论如何这里是一个解决方案。

<td><%= link_to 'Buy',purchases_path(amount: product.amount,id: product.id), method: :post %></td>

这应该有效。试试这个。