让我解释一下我想做什么,然后问我的问题。我是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控制台相互链接的新用户和开发人员,但我无法弄清楚我在网上做错了什么。
非常感谢任何帮助。
答案 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。