我正在rails应用程序中创建组,需要将用户保存到数据库(至少我是这么认为),以便我可以在显示页面上显示由用户电子邮件创建的内容。我不能使用current_user,因为它随着每次登录而改变。下面是我使用的代码并导致ActiveRecord::RecordNotFound in GroupsController
。所以我需要知道如何将用户保存到数据库(如果这是正确的方法),以使其正常工作或如何使其正常工作?
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
has_many :groups
end
class Group < ActiveRecord::Base
belongs_to :user
end
t.has_many:群组
t.belongs_to :user
def create
@user = User.find(params[:id])
@group = @user.groups.build(params[:id])
respond_to do |format|
if @group.save
format.html { redirect_to @group, notice: 'Group was successfully created.' }
format.json { render json: @group, status: :created, location: @group }
else
format.html { render action: "new" }
format.json { render json: @group.errors, status: :unprocessable_entity }
end
end
end
def new
@user = User.find(params[:id])
@group = @user.groups.build(params[:id])
respond_to do |format|
format.html # new.html.erb
format.json { render json: @group }
end
end
答案 0 :(得分:0)
这里的设置没有多大意义。在新操作中,您不应搜索用户。最有可能的是,如果你的路由使用正确,你甚至不会得到一个parma [:id]。在create方法中也是如此,(正如名称所示)应该创建一个新的用户记录而不是搜索它。
新操作应该只创建一个新记录(不保存),如
def new
@user = User.new
... # no building of groups here, since record is still empty, does not even have an id
end
现在它应该使用此用户对象在new.html.erb中呈现输入表单
用户提交新表单后,他将以创建操作结束。现在您创建一个新用户并实际保存在数据库中:
def create
@user = User.new(params[:user])
if @user.save
# maybe create some groups here
redirect_to @user
else
render :action => "new"
end
end
到目前为止,这与设计和用户身份验证没什么关系。
这只是一个粗略的概述,向您展示最常见的过程(正如您在任何好的RoR教程中所见) 否则你的问题不清楚你想要做什么以及它与devise和current_user有什么关系。 您很可能会有一些控制器和操作,让用户可以看到他的电子邮件,组和其他用户特定数据。在这种情况下,那些控制器必须使用current_user(登录后)。 许多项目都具有管理界面的附加功能,允许特定用户查看用户及其数据列表。在这种情况下,您将使用current_user确保用户具有管理员权限以及其他查找和搜索功能,以显示管理用户的数据。