Restful Authentication - 将用户ID与配置文件相关联

时间:2010-01-21 19:02:52

标签: ruby-on-rails database model-view-controller entity-relationship

我是Ruby on Rails的新手...我一直在玩开发社交网络类型的应用程序....我刚刚成功地将Restful Authentication添加到我的应用程序中......现在我想创建一个模型/ controller,每个用户登录后都可以创建/编辑自己的个人资料。

所以我创建了模型和控制器...... Profile控制器中的代码如下所示:

def new
  @profile = Profile.new(params[:user_id])
  if request.post?
      @profile.save
      flash[:notice] = 'Profile Saved'
      redirect_to :action => 'index'
  end
end

我正在尝试将用户在会话中的[restful auth。]的user_id连接到我在配置文件模型中创建的user_id列。我已经在用户模型中添加了“has_one:profile”,在配置文件模型中添加了“belongs_to:user”...但是它没有添加配置文件。我有点卡住,因为我对此比较陌生......我应该在会话模型或控制器中添加一些东西吗?

任何帮助,想法或研究的地方都会受到赞赏......

将新模型连接到现有模型非常重要,我想弄明白这一点。

2 个答案:

答案 0 :(得分:2)

默认情况下,new操作是HTTP GET,所以你的request.post?块被绕过。 request.post?无论如何都是无关紧要的(出于基本目的),所以我完全摆脱了这一点,并将save代码的其余部分移到你的create行动中。

def new
  @profile = Profile.new
end

def create

  @user = User.find(params[:user_id])
  @profile = Profile.create(@user, params[:profile]) # or whatever params you use in your form
  # you can also do @profile = @user.profile.create(params[:profile]) here
  # sans @user find: @profile = current_user.profile.create(params[:profile])

  if @profile.save
    flash[:notice] = 'Profile Saved'
    redirect_to :action => 'index'
  else
    flash[:warning] = 'Could not save profile'
    redirect_to :back # or wherever
  end

end

答案 1 :(得分:0)

首先,如果您刚开始使用,则应认真考虑使用Authlogic而不是Restful Authentication。没有生成器,最终您可以轻松管理代码。

对于此特定问题:记录@profile.save的创建应该在create操作中。 new用于为表单设置模型实例,以便在new.html.erb视图中对其进行编辑。

您可能还可以访问名为@current_user的方法(或称为current_user的函数)。如果你这样做,你可以通过这样做来缓解一些事情:

@profile = current_user.profile.build

方法build将为您创建用户与个人资料之间的关联。