同时提交两份带有栏杆的表格



基本上我的想法很简单——我想为每个新用户创建一个新的购物车。表单本身是用scaffold生成的,我们在这里讨论rails 4.0.1

有办法做到这一点吗?如果有,怎么做?也许你可以给我链接一些真实的例子?

在Rails控制器中创建多个对象不需要多个窗体。假设你有这样的关系:

class User < ActiveRecord::Base
  has_many :carts #or has_one :cart
end
class Cart < ActiveRecord::Base
  belongs_to :user
end

那么这样做是完全可以接受的:

class UsersController < ApplicationController
  def new
    @user = User.new
  end
  def create
    @user = User.new user_params
    if @user.save
      @user.carts.create # or @user.create_cart
      redirect_to user_path
    else
      render action: :new
    end
  end
  private
    def user_params
      params.require(:user).permit(...)
    end
end

如果新的用户表单碰巧包含一些特定于购物车的详细信息,则使用fields_for使其以以下形式可用:

= form_for :user do |f|
  ... f.blah for user fields ...
  = fields_for :cart do |cart_fld|
    ... cart_fld.blah for cart fields ...

并将cart_params添加到控制器中。

最新更新