刚开始我在ROR的第一个项目,我面临着在表之间建立关系的问题。 作为一个菜鸟我在网上搜索了很多,尝试了很多东西,但无法弄清楚如何使这个工作。 这是我的问题:我为登录功能构建了一个用户表 - 用devise制作,现在我想构建另一个表UserMeta来携带我的用户的所有个人资料信息。
以下是我所做的代码:
应用程序/模型/ user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
attr_accessible :email, :encrypted_password
has_one :user_meta
end
*应用/模型/ user_meta.rb *
class UserMeta < ActiveRecord::Base
attr_accessible :admin, :birthday, :company, :first_name, :job, :last_name, :phone, :rfid, :statut, :website, :user_id
belongs_to :users
end
class User
has_one :user_meta
end
*应用程序/控制器/ user_controllers.rb *
def new
@user = User.new
@meta = UserMeta.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @user }
end
end
应用程序/视图/用户/ new.html.erb
<%= form_for(@meta) do |f| %>
<div class="field">
<%= f.label :phone %><br />
<%= f.text_field :phone %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
它返回:
undefined method `meta_index_path' for #<#<Class:0x000001016f3f18>:0x00000100e9f6f0>
我知道有一个或多个错误,最好的方法是什么?一些帮助将不胜感激:)
答案 0 :(得分:1)
在Rails中,最好将您的类命名为与文件名相同。所以app / models / user_meta.rb应为class UserMeta < ActiveRecord::Base
。
无需在app / models / user_meta.rb中重新打开用户类。他已经了解app / models / user.rb了。
将您的belongs_to :users
更改为belongs_to :user
在app / models / user.rb中,您可以删除第二个attr_accessible :email
。
答案 1 :(得分:1)
你可以改成这样:
应用/模型/ user.rb 强>
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me, :encrypted_password
has_one :user_meta
accepts_nested_attributes_for :user_meta
end
应用/模型/ user_meta.rb 强>
class UserMeta < ActiveRecord::Base
attr_accessible :admin, :birthday, :company, :first_name, :job, :last_name, :phone, :rfid, :statut, :website, :user_id
belongs_to :user
end
应用/控制器/ user_controllers.rb 强>
def new
@user = User.new
@user.build_meta_user
respond_to do |format|
format.html
format.json { render json: @user }
end
end
应用/视图/用户/ new.html.erb 强>
<%= form_for @user, :url => {:action => 'create'} do |f| %>
<!-- User related fields -->
<%= f.fields_for :user_meta do |meta_f| %>
<div class="field">
<%= meta_f.label :phone %><br />
<%= meta_f.text_field :phone %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>