如何传递params并保存在db中

时间:2016-02-17 02:06:25

标签: ruby-on-rails ruby ruby-on-rails-4 relationship

有关系:

(我的代码是葡萄牙语)

顺序

class Pedido < ActiveRecord::Base
  belongs_to :pessoa

class Pessoa < ActiveRecord::Base
  belongs_to :usuario
  has_many :enderecos
  has_many :pedidos

  accepts_nested_attributes_for :enderecos
end

用户

class Usuario < ActiveRecord::Base

  has_many :pessoas
  has_many :pedidos, through: :pessoas

end

carrinhos_controller.rb

def checkout
    @pedido = current_usuario.pedidos.build
  end

在迁移Person中有usuario_idOrderpessoa_id和其他人...... 当我完成一个订单时,pessoa_id为空并且不保存在数据库上,为什么??

更多代码: pedidos_controller.rb

class PedidosController < ApplicationController
  before_action :authenticate_usuario!

  # Criar pedido
  def create
    @pedido = current_usuario.pedidos.build(pedido_params)
    if @pedido.save
      @pedido.construir_cache_item_carrinho(carrinho_atual)
      @pedido.calcular_total!(carrinho_atual)
      carrinho_atual.limpar!
      #OrdemDeServico.new(carrinho_atual, @pedido).encomendar_pedido!
      redirect_to pedido_path(@pedido.token)
    else
      render "carrinho/checkout"
    end
  end

3 个答案:

答案 0 :(得分:2)

使用此代码:

def checkout
 @pedido = current_usuario.pedidos.build
 @pedido.save
end

如果您使用的是buildnew,则必须使用save方法。否则,您可以使用直接create方法。

答案 1 :(得分:0)

build无法保存到数据库。之后保存(@pedido.save)或尝试@pedido = current_usuario.pedidos.create

答案 2 :(得分:0)

我想您使用的是嵌套表单之类的内容来发布参数。我经常使用nested_form gem by Ryan Bates

如果您仔细考虑使用情况,可以找到一些有用的见解。 还要注意 strong_parameters :需要在控制器中声明你想要允许的参数。