2

我有 2 个模型 - 用户模型和配置文件模型。我已将关系设置如下:

class User
  has_one :profile
end

class Profile
  belongs_to :user
end

我有一个具有 4 个操作的配置文件控制器 - 新创建编辑和更新。一旦用户注册或登录,他就会被重定向到 Profiles 控制器中的 New 操作。从这里我如何为该用户创建个人资料?具体来说,我应该在我的新动作和创建动作中拥有什么。现在新操作的路径只是profiles/new,它没有捕获用户参数。我正在尝试这样做,但它失败了。

配置文件控制器

def new
    @user = User.find(params[:id])
    @profile = @user.build_profile
  end

  def create
    @profile = current_user.build_profile(params[:profile])
    if @profile.save
      redirect_to current_user
    else
      render new
    end
  end
4

2 回答 2

2

配置文件控制器中的new操作不需要id从参数中获取用户的。所以你的控制器会是这样的

def new
  @user = current_user
  @profile = @user.build_profile
end

def create
  @profile = current_user.build_profile(params[:profile])
  if @profile.save
    redirect_to current_user
  else
    render new
  end
end

实际上将id用户的 发送到new操作可能是一个安全漏洞,因为我可以发送id另一个用户的 并为系统中的其他用户创建配置文件,这是不允许的。

于 2012-12-29T17:52:40.187 回答
2

你不应该User.find(params[:id]在你的新动作中使用。

就像在下面的创建操作中一样,您应该User通过current_user.

除了无法正确获取之外,还有更多问题User吗?

于 2012-12-29T17:53:00.093 回答