2014-06-21 5 views
0

Rails 4.1
рубин 2,0Неопределенный метод `каждый» для # <Пользователь:

Credential.rb

class Credential < ActiveRecord::Base 
    belongs_to :category 
    has_many :user 

    validates :name, :login, :password, presence: true 

    attr_accessor :encryption_key 

    attr_encrypted :login, key: :encryption_key 
    attr_encrypted :password, key: :encryption_key 
end 

User.rb

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :credentials 

    def you 
    "You are <b>#{email}</b>" 
    end 
end 

CredentialsController.rb

class CredentialsController < ApplicationController 
    before_filter :authenticate_user! 

    def create 
    @credential = current_user.credentials.new 
    @credential.encryption_key = session[:master_key] 
    @credential.update(credential_params) 

    if @credential.save 
     redirect_to credential_path(@credential), notice: "Password entry created successfully." 
    else 
     render "new" 
    end 
    end 

Линия:

@credential.update(credential_params) 

бросает исключение

undefined method 'each' for #<User:0x4de4f58> 
+1

Учетные данные 'has_many: users' и User' has_many: credentials'. Если вы хотите отношения «многие ко многим», это не то, как вы это делаете. Для модели необходимо использовать 'own_to: user' или' belongs_to: credential' с помощью foreign_key. Кроме того, у вас есть опечатка. Это 'has_many: users' не' has_many user'. – David

+0

Глупая ошибка) Добавить ответ Я отметю это! –

+0

Это исправить вашу ошибку? – David

ответ

2

Вам нужно редактировать свои ассоциации. У вас есть учетные данные, которые has_many :user и пользователи, которых has_many :credentials. Точка с внешним ключом должна быть belongs_to не has_many. Если вы пытаетесь установить отношения «многие ко многим», используйте либо has_many_and_belongs_to, либо таблицу соединений. Кроме того, это должно быть has_many :users, а не has_many :user. Это должно решить вашу ошибку.

Смежные вопросы