我试图让它在应用程序中创建新用户时,已经为它们设置了所有内容。例如。他们有一个文件夹,他们将笔记保存到。因此,不必点击指向新文件夹的链接,然后在创建它的提交按钮,然后才能保存任何备注,是否可以在创建用户帐户时自动为它们设置一个?
E.g。
users_controller.rb:
def create
@user.password = params[:password]
respond_to do |format|
if @user.save
@folder = @user.folder.new(params[:folder]) # this is the line that I'm unsure how to implement
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
解决方案:
当我使用Devise时,我添加到我的用户控制器的路由被覆盖了,所以解决方案(可能有更好的方法来执行此操作!)是将代码添加到注册控制器中的after_user_sign_up_path,然后它执行得很好。
答案 0 :(得分:0)
在您的操作中,您使用@user
和@user.folder
的参数。
我建议使用nested_attributes。
class User
has_one :folder
accepts_nested_attributes_for :folder
end
然后你可以这样写你的行动:
def create
@user.update_attributes(params[:user])
respond_to do |format|
if @user.save
# Here the folder is already saved!
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
应该有很多优点(虽然我没有全部检查过),其中包括:
@user
的风险(如果文件夹保存失败,用户保存失败)@user
和@user.folder
但要做到这一点,你的params应该有不同的结构(用fields_for很容易实现):
user:
password: "Any password"
folder_attributes:
any_attribute: "Any value"