基本上我的想法很简单——我想为每个新用户创建一个新的购物车。表单本身是用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
添加到控制器中。