Доступ к более чем одной активной записи в контроллере действий в rails 3

Предположим, у меня есть 2 модели: 1. user и 2. userProfile
у нас есть взаимно-однозначные отношения между двумя моделями.
Затем я хотел бы создать Usercontroller и создать пользователя с такими полями, как имя пользователя и пароль в user, и другими деталями, такими как адрес, номер мобильного телефона и т. д. в userprofile.
user_id - это внешний ключ в user_profile
Затем я создал new.html.erb в пользовательском представлении, которое отображает все вышеуказанные поля в той же форме. Тогда как я могу сохранить данные в двух разных таблицах user и userprofile соответственно.

what I tried is
1. has_one :user_profile in user.rb and belongs_to :user in user_profile.rb
2. accepts_nested_attributes_for :user_profile in user.rb user_controller:



     def create
       @user = User.new(params[:user])
       if @user.save
          @userprofile = @user.create_user_profile(params[:user_profile])
               redirect_to root_url, :notice => "Signed up!"     
       else
          render "new"
        end 
      end

 

3. Then I got error the only userid is created in user_profile and also update run to make user_id nil which can't be! so raising error:
Unknown column 'user_profiles.' in 'where clause': UPDATE `user_profile` 
SET `user_id` = NULL WHERE `user_profiles`.`` IS NULL
so what's wrong and how to troubleshoot this?


person Chirag Rupani    schedule 09.08.2012    source источник


Ответы (1)


Если вы используете accepts_nested_fields_for, вам не нужно самостоятельно управлять сохранением записей UserProfile. ActiveRecord позаботится об этом за вас.

Чтобы это заработало, вам необходимо:

  1. Убедитесь, что у вас есть accepts_nested_fields_for :user_profile в вашей модели User
  2. Обновите ваше приложение / views / users / _form.html.erb, чтобы включить элементы формы для UserProfile, например:

    <%= f.fields_for :user_profile, @user.user_profile do |profile_form| %>
    <%= profile_form.text_field :address %>
    <%= profile_form.text_field :mobile_number %>
    <% end %>
    
  3. Обновите свое UsersController#new действие, чтобы создать UserProfile для пользователя, например

    def new
      @user = User.new
      @user.build_user_profile
      (...)
    end
    

Для получения дополнительной информации см. документы Rails API, посвященные вложенным атрибутам Active Record.

person jstr    schedule 09.08.2012
comment
Я следил за этим, но !, ничего не хранится в таблице user_profile - person Chirag Rupani; 09.08.2012
comment
Убедитесь, что в вашей модели UserProfile нет сбойных проверок. Если вы не уверены, просто отключите все проверки, которые у вас есть в этой модели, и попробуйте. - person jstr; 09.08.2012
comment
Я не проводил никаких проверок в модели UserProfile прямо сейчас. Что-то не хватает? - person Chirag Rupani; 09.08.2012
comment
Вы можете попробовать добавить attr_accessible :user_profile_attributes в свою модель User. Также проверьте, что атрибуты передаются в params [: user] [: user_profile_attributes]. - person jstr; 09.08.2012
comment
Нет, это тоже не работает, и когда я передаю params [: user] [: user_profile_attributes], он выдает ошибки проверки - person Chirag Rupani; 09.08.2012
comment
Теперь, когда я передаю params [: user_profile] как userprofile = user.create_user_profile (params [: userprofile]) после user.save, тогда значения вставляются в user_profile успешно, за исключением того, что он запускает запрос обновления UPDATE user_profiles SET 'user_id' = NULL где user_profile. НУЛЕВОЙ - person Chirag Rupani; 10.08.2012
comment
я думаю, что любая модель / контроллер не получает значений из user_profile. - person Chirag Rupani; 10.08.2012