0

我在 Rails 3 中有两个模型——一个用户模型和一个配置文件模型。

class User < ActiveRecord::Base
  has_one :profile, :dependent => :destroy
end

class Profile < ActiveRecord::Base
  belongs_to :user
end

它们的范围在我的 routes.rb 文件中,如下所示:

resources :users do
  resources :profiles
end

所以现在,我创建配置文件的表单如下所示(使用 SimpleForm):

<%= simple_form_for([@user, @profile]) do |f| %>
  <%= f.error_notification %>
    ...(Other Inputs)
<% end %>

但是,用户 ID 似乎并没有像我想象的那样自动发送到配置文件模型。我必须通过控制器手动设置吗?还是我错过了什么?

4

2 回答 2

0

您应该首先确保 User 和 Profile 之间的关系确实正常工作。当我认为您的意思是:

class User < ActiveRecord::Base
  has_one :profile, :dependent => :destroy
end

为了将用户 ID 与表单一起发送,表单应该位于一个页面上,其 URL 类似于“localhost:3000/users/5/profiles/new”,您可以使用帮助程序“new_user_profile_path(5)”链接到该页面",对于 ID 为 5 的用户。

当您提交表单时,它将在您的 ProfilesController 中执行创建操作。以下应导致创建配置文件:

def create
  @user = User.find(params[:user_id])
  @profile = @user.build_profile(params[:profile])
  @profile.save!
end
于 2012-09-05T09:05:16.323 回答
0

添加 :method => :post 到您的表单,因为您的 html 请求是 GET 应该是 POST

simple_form_for([@user, @profile], :method => :post) do |f| %>
于 2012-09-05T09:28:44.630 回答