Регистрация пользователя от другой модели - PullRequest
0 голосов
/ 13 мая 2011

каждый User может иметь только один MedicalHistory, поэтому у меня есть

class User < ActiveRecord::Base
    acts_as_authentic
end

class MedicalHistory < ActiveRecord::Base
    belongs_to :user
end

. Используя вышеизложенное, я могу успешно создать пользователя из модели MedicalHistory в консоли:

newuser = Medicalhistory.new
newuser.user = User.new
newuser.user.username='testusername'
newuser.user.password='blahblah'
newuser.user.password_confirmation='blahblah'
newuser.user.save

MedicalHistory Side выглядит следующим образом

#controller
def new
    @medicalhistory = MedicalHistory.new
    @medicalhistory.user = User.new
end

#form
<%=...%>
<%=f.intput :cell_phone%>
<%=f.fields_for :user do |builder|%>
  <%= render "registration_form", :f => builder %>
<% end %>

#Partial
<%=f.input :email%>
<%=f.input :password%>
<%=f.input :password_confirmation%>

Ошибка

При отправке формы я получаю сообщение об ошибке ниже:

User(#-) expected, got ActiveSupport::HashWithIndifferentAccess(#)

Ошибка в следующей строке:

#controller
def create
    @medicalhistory = Medicalhistory.new(session[:medicalhistory_params]) #gives error
    #somewhere here I should extract registration fields and register the user
end

Вопрос Есть ли способ избежать полей в частичном (поля регистрации), попадающих в session[:medicalhistory_params] ... есть ли except или что-то?

Ответы [ 3 ]

1 голос
/ 13 мая 2011

измените свою модель следующим образом:

class MedicalHistory < ActiveRecord::Base
  belongs_to :user
  accepts_nested_attributes_for :user
end

Ссылка здесь: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

0 голосов
/ 13 мая 2011

Возможно, вы захотите взглянуть на accepts_nested_attributes_for

Смотрите это для вступления http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes

0 голосов
/ 13 мая 2011

Есть ли причина, по которой вы не используете что-то вроде params[:medical_history] в #create?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...