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

时间:2012-02-23 07:25:08

标签: ruby-on-rails

我正在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

1 个答案:

答案 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确保用户具有管理员权限以及其他查找和搜索功能,以显示管理用户的数据。