0

刚开始我在 ROR 的第一个项目,我在建立表之间的关系时遇到了问题。作为一个菜鸟,我在网上搜索了很多东西,尝试了很多东西,但不知道如何让它工作。这是我的问题:我为登录功能构建了一个用户表 - 用设计制作,现在我想构建另一个表 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

*app/models/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

*app/controllers/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>

我知道有一个或多个错误,最好的方法是什么?一些帮助将不胜感激:)

4

2 回答 2

1
  • 在 Rails 中,最好将类命名为与文件名相同。所以 app/models/user_meta.rb 应该是class UserMeta < ActiveRecord::Base.

  • 无需重新打开 app/models/user_meta.rb 中的 User-class。他已经知道 app/models/user.rb 了。

  • 改变你belongs_to :usersbelongs_to :user

  • 在 app/models/user.rb 你可以删除 2nd attr_accessible :email

于 2013-03-05T19:34:51.397 回答
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 %>
于 2013-03-05T19:43:18.573 回答