1

让我解释一下我要做什么,然后问我的问题。我完全是 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

Developer#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 %>
...

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

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

任何帮助将非常感激。

4

1 回答 1

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 的嵌套属性。查看文档中的一些示例。

于 2013-04-04T19:15:45.857 回答