0

RORで最初のプロジェクトを開始したばかりですが、テーブル間の関係を構築する際に問題が発生しています。初心者として、私はWebでよく検索します。たくさんのことを試してみてください。しかし、これを機能させる方法がわかりません。これが私の問題です:ログイン機能用のUserテーブルを作成しました-deviseで作成しました。次に、ユーザーのすべてのプロファイル情報を保持する別のテーブルUserMetaを作成します。

これが私がしたことのコードです:

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

app / views / users / 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>

私は1つまたは多くの間違いがあることを知っています、これを行うための最良の方法は何ですか?いくつかの助けをいただければ幸いです:)

4

2 に答える 2

1
  • Railsでは、クラスにファイル名と同じ名前を付けるのが最善です。したがって、app / models/user_meta.rbはになりますclass UserMeta < ActiveRecord::Base

  • app / models/user_meta.rbでUserクラスを再度開く必要はありません。彼はすでにapp/models/user.rbについて知っているでしょう。

  • に変更belongs_to :usersしますbelongs_to :user

  • app / models / user.rbで、2番目をドロップできますattr_accessible :email

于 2013-03-05T19:34:51.397 に答える
1

次のように変更できます。

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

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 :user
end

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

app / views / users / 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 に答える