2012-05-13 8 views
1

私は広範囲に検索し、解決できる解決策が見つからないので、ここに投稿することにしました。同時に2つのモデルを作成する

誰かがAUTに私が必要とする新しいユーザーアカウントを作成すると、私は2つのモデル

ストア

class Store < ActiveRecord::Base 
    attr_accessible :storeimage, :storename 
    belongs_to :user 

    validates :user_id, :presence => true 
end 

ユーザー

class User < ActiveRecord::Base 
    attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :userimage, :remove_userimage 
    has_secure_password 
    has_many :gears 
    has_many :comments, :dependent => :destroy 
    has_one :store, :dependent => :destroy 
    before_save :create_remember_token 
    require 'carrierwave/orm/activerecord' 
    mount_uploader :userimage, UserpicUploader 
    accepts_nested_attributes_for :store 

    ... 

end 

を持っています私はユーザーフォーム内で考えていたそのユーザー用の新しいストアを静的に作成します。では、作成する新しいユーザーにリンクされた新しいストアオブジェクトを作成するにはどうすればよいですか?ここで

はCreateActionのため ユーザコントローラからの私のコード

def create 
    @user = User.new(params[:user]) 
    if @user.save 
     sign_in @user 
     redirect_to @user, :flash => {:success => "Welcome to Equiptme"} 
    else 
     render 'new' 
     @title = "Sign up" 
    end 
    end 

ビュー

<div class="signup_container"> 
    <div class="signup_container_interior"> 
    <%= provide(:title, 'Sign up') %> 
    <%= form_for(@user) do |f| %> 
    <% if @user.errors.any? %> 
     <div> 
     <div> 
      The form contains <%= pluralize(@user.errors.count, "error") %>. 
     </div> 
     <ul> 
     <% @user.errors.full_messages.each do |msg| %> 
      <li>* <%= msg %></li> 
     <% end %> 
     </ul> 
     </div> 
    <% end %> 
     <div class="register_field"> 
     <div class="register_nonerror_container"> 
      <%= f.label :first_name %>&nbsp;<%= f.text_field :first_name, class: 'register_text_area' %> 
     </div> 
     </div> 
     <div class="register_field"> 
     <div class="register_nonerror_container"> 
      <%= f.label :last_name %>&nbsp;<%= f.text_field :last_name, class: 'register_text_area' %> 
     </div> 
     </div> 
     <div class="register_field"> 
     <div class="register_nonerror_container"> 
      <%= f.label :email %>&nbsp;<%= f.text_field :email, class: 'register_text_area' %> 
     </div> 
     </div> 
    <!--************STORE FIELDS ************** --> 

    <!--************STORE FIELDS END ************** --> 

     <div class="register_field"> 
     <div class="register_nonerror_container"> 
      <%= f.label :password %>&nbsp;<%= f.password_field :password, class: 'register_text_area' %> 
     </div> 
     </div> 
     <div class="register_field"> 
     <div class="register_nonerror_container"> 
      <%= f.label :password_confirmation %>&nbsp;<%= f.password_field :password_confirmation, class: 'register_text_area' %> 
     </div> 
     </div> 
     <div class="actions"> 
     <%= f.submit "Create Account", class: 'register_button' %> 
     </div> 
    <% end %> 
    </div> 
</div> 
+1

どうして 'new_record? 'メソッドで' after_save'コールバックを使用していませんでしたか? – caulfield

+0

[rails association docs]ページ(http://guides.rubyonrails.org/association_basics.html#has_one-association-reference)で検索しましたか? –

答えて

4

あなたは、ユーザーと店舗間has_one関係とともに作成build_association methodを使用することができます:

def create 
    @user = User.new(params[:user]) 
    @user.build_store 

    # etc 
end 

ユーザーを保存したまであなたが店を必要としない場合は、create_associationを使用する場合があります:

if @user.save 
    @user.create_store 
    # etc 
    end 
+0

これはうまくいくようです。ありがとうございました。 – DaveG

+0

私はcreate_associationを使用することに決めました。 storenameのようなパラメータを渡すには? – DaveG

+0

ちょうどあなたがcreate: '@ user.create_store(:storename => 'House of Pancakes')' – rjz

関連する問題