Rails作用域不分配belongs_to

时间:2012-09-05 08:34:31

标签: ruby-on-rails-3 forms belongs-to

我在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似乎没有像我假设的那样自动发送到配置文件模型。我是否必须通过控制器手动设置?或者我错过了什么?

2 个答案:

答案 0 :(得分:0)

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

时,你实际上已经在你的用户模型中添加了“has_one:user”
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

答案 1 :(得分:0)

add:method =&gt; :发布到您的表单,因为您的HTML请求是GET,应该是POST

simple_form_for([@user, @profile], :method => :post) do |f| %>