has_one关系不适用于new / create

时间:2012-05-25 07:25:46

标签: ruby-on-rails ruby-on-rails-3

我有这些模特:

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

class UserTms < ActiveRecord::Base
  belongs_to :user
end

在UsersController中我有这个:

def new
  @user = User.new
  @user.build_user_tms
end

用户表单如下所示:

<%= form_for(@user) do |f| %>
  <%= f.collection_select(:company_id, @companies, :id, :name, :include_blank => true) %>

  <%= f.fields_for(:user_tms) do |tms_form| %>
    <%= tms_form.collection_select(:department, @departments, :id, :description) %>
  <% end %>
<% end %>

我认为非常基本的东西,但在提交表单时,我收到错误:

User tms user can't be blank

奇怪的是,在编辑现有用户时,一切正常。知道这里出了什么问题吗?谢谢!

3 个答案:

答案 0 :(得分:0)

不确定但是有一个带有“s”的课程结束是不寻常的。

表名是什么? user_tms或user_tmses。我会在你的模型中设置复数名称。

我可能错过了其他的东西,如果是这样我会删除。不过,最好为新开发者提供更好的型号名称。 tms对大多数人来说意义不大。

答案 1 :(得分:0)

嗯,这真的很奇怪,因为我认为rails会自动处理这个问题,但看起来你的嵌套模型缺少对'nester'的引用。尝试手动提供。

@user.user_tms.user = @user

你必须在创建动作中这样做。记录保存的地方。

您使用的是哪种版本的导轨?

答案 2 :(得分:0)

我发现了什么是错的,我有一个方法会导致错误的返回值,这会干扰与这两个模型的关系的正常处理。