创建组并需要在rails应用程序中将设计用户保存到数据库

我正在rails应用程序中创建组,需要将用户保存到数据库(至少我是这么认为),以便我可以在显示页面上显示由用户电子邮件创建的内容。 我不能使用current_user,因为它随着每次登录而改变。 下面是我使用的代码,并ActiveRecord::RecordNotFound in GroupsController中生成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 

你在这里的设置没有多大意义。 在新操作中,您不应搜索用户。 最有可能的是,如果你的路由使用正确,你甚至不会得到一个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 

到目前为止,这与设计和用户身份validation没有多大关系。

这只是一个粗略的概述,向您展示最常见的过程(正如您在任何好的RoR教程中所发现的那样)否则您的问题不是很清楚您想要做什么以及它与devise和current_user有什么关系。 您很可能会有一些控制器和操作,让用户可以看到他的电子邮件,组和其他用户特定数据。 在这种情况下,那些控制器必须使用current_user(登录后)。 许多项目都具有管理界面的附加function,允许特定用户查看用户及其数据列表。 在这种情况下,您将使用current_user确保用户具有管理员权限以及其他查找和搜索function,以显示管理用户的数据。