Говоря :foreign_key => "smail"
вы говорите рельсы, что Muser
столбец smail
указывает на User
внешний ключ модели. Скорее всего, это не так.
Предполагая, что первичный ключ User
моделей называется id
, вы должны user_id поле Muser
и изменить belongs_to :user, :foreign_key => "smail"
в:
belongs_to :user
На User
модели вы можете определить обратную связь с помощью:
has_one :muser
Кроме того, чтобы следовать рельсы модели соглашения о присвоении имен, вы должны переименовать Users
в User
и Musers
- Muser
.
Вы должны узнать больше о belongs_to и has_one.
Если, с другой стороны, модель User
фактически использует электронную почту для ее первичного ключа, я настоятельно рекомендую вам ее изменить и вместо этого добавить первичный ключ с автоматическим добавлением. Как правило, первичный ключ следует выбирать таким образом, чтобы он никогда не менялся. Если он изменится, все внешние ключи, указывающие на этот первичный ключ, также должны измениться. Вы должны использовать первичный ключ без автоматического увеличения, если у вас есть определенная причина для этого.
Более подробная информация о выборе первичного ключа: How to choose my primary key?
В полученных ответах объясняется основная проблема, однако есть также проблема с тем, как вы создаете '@ user'. Вы не должны дублировать имя модели. Вместо этого используйте '@user = User.first'. –
@JamesChevalier user = Users.first создает пользователя не User.first, он говорит о неинициализированной константе – Yagiz
@Yagiz. Вы должны переименовать 'Users' в' User' и 'Musers' в' Muser'. Модели Rails должны быть названы в их единственном виде. –