form_for中的undefined方法在Rails 3中使用多态关联

时间:2013-04-04 18:55:42

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

让我解释一下我想做什么,然后问我的问题。我是Ruby / Rails的新手,但他是一位经验丰富的开发人员。

我想要什么:我想拥有开发人员,客户和管理员。我想要一个通用的身份验证机制。

什么似乎是最好的:我认为最好对此进行建模的方法是让一个用户处理身份验证,然后进行某种继承或扩展每个功能的东西。用户类型。

我正在尝试:我正在尝试一种称为多态关联(http://guides.rubyonrails.org/association_basics.html#polymorphic-associations)的事情,但我错过了一些东西。目前,如果我转到/developers/new,我会得到以下内容

in developers/_fields.html.erb where line #4 raised:
undefined method `name' for #<Developer:0x00000002bafd18>

user.rb 代码段

class User < ActiveRecord::Base
  attr_accessible :email, :name, :password, :password_confirmation, :profile_id, :profile_type
  has_secure_password
  belongs_to :profile, :polymorphic => true
  ...
end

developer.rb 代码段

class Developer < ActiveRecord::Base
  attr_accessible :skype_name
  has_one :user, :as => :profile, :dependent => :destroy
  accepts_nested_attributes_for :user
end

routes.rb 代码段

resources :developers

开发人员#new 控制器代码段

def new
  @developer = Developer.new
  @developer.user = User.new
end

new.html.erb 开发者代码段

<div class="row">
  <div class="span6 offset3">
    <%= form_for (@developer) do |f| %>
      <%= render 'fields', f: f %>
      <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
    <% end %>
  </div>
</div>

最后 _fields.html.erb 代码段

<%= render 'shared/error_messages' %>
<%= f.label :name %>
<%= f.text_field :name %>
...

我发现的最接近的问题是this,但我从他们的答案中尝试了一些事情,但没有帮助。

我可以创建一个通过rails控制台相互链接的新用户和开发人员,但我无法弄清楚我在网上做错了什么。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您正尝试访问user父级范围内的developer属性。使用fields_for修改范围:

<%= render 'shared/error_messages' %>
<%= f.fields_for :user do |u| %>
  <%= u.label :name %>
  <%= u.text_field :name %>
<% end %>

您可能还希望让Developer模型接受User的嵌套属性。看一些例子in the documentation