2012-05-14 9 views
1

私はむしろRailsの新機能です。入れ子になったモデルを含むサインアップフォームを作成しています。私がフォームを送信すると、ユーザーはきちんと保存されますが、ネストされたモデルはサブスクリプションデータベースに何も保存しませんし、コンソールはエラーをスローしません。Rails - 入れ子になったモデルが保存に失敗する

私は何か不気味なことを間違いなく逃していないことを願っています。共有できるヒントはありがたいです。ありがとう!

class Plan < ActiveRecord::Base 
    attr_accessible :posts, :name, :price 
    has_many :users 
end 

class User < ActiveRecord::Base 
    belongs_to :plan 
    has_many :events 
    has_one :subscription, :autosave => true 

    accepts_nested_attributes_for :subscription 

    attr_accessible :subscription_attributes 

    def save_with_payment 
    if valid? 
    customer = Stripe::Customer.create(
     email:email, 
     plan: plan_id, 
     card: stripe_card_token) 
    self.stripe_customer_token = customer.id 
    save! 
    end 
    rescue Stripe::InvalidRequestError => e 
    logger.error "Stripe error while creating customer: #{e.message}" 
    errors.add :base, "There was a problem with your credit card." 
    false 
    end 
end 

class Subscription < ActiveRecord::Base 
    attr_accessible :plan_id, :status, :user_id 
    belongs_to :user 

end 

これはユーザコントローラである:

def new 
    @user = User.new 
    plan = Plan.find(params[:plan_id]) 
    @user = plan.user 
    @user.build_subscription 
end 

def create 
    @user = User.new(params[:user]) 
    if @user.save_with_payment 
    sign_in @user 
    flash[:success] = "Welcome to the SendEvent!" 
    redirect_to @user 
    else 
    render 'new' 
    end 
end 

これはフォームである:

<%= form_for @user, :html => {:class => "form-inline"} do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="control-group"> 
     <%= f.label :name, :class => "control-label" %> 
     <%= f.text_field :name %> 
    </div> 

    # A few more fields here and... 

    # The nested model: 
    <%= f.fields_for :subscription do |builder| %> 
     <%= builder.hidden_field :status, :value => true %> 
    <% end %> 
    <%= f.submit "Create my account", class: "btn btn-large btn-primary", id: "submitacct" %> 
<% end %> 
+0

Railsコンソールでユーザーを作成しようとしましたか? – Soliah

+0

Subscriptionクラス内の 'new'メソッドと 'create'メソッドは意図的ですか? – moritz

+0

彼らは意図的ではありません、私は "私は何かを試してみましょう"キツネには必死になったときに追加しました。私はそれらを削除するために投稿を編集しました。 –

答えて

0

サンプルアプリからここ

はコード -

モデルでありますRailsCasts

RailsCasts Episode #196: Nested Model Form (revised)

たぶん、あなたを助けます。

+0

@Soliah Railsコンソールでユーザーを作成できますが、User.newコンソールコマンドにネストされた属性を含める方法がわかりません。 usernew = User.new(:name => "Name"、email => "[email protected]"、:subscription_attributes => {:ステータス=> "アクティブ"}) 私にTypeErrorを与えます:SymbolをIntegerに変換できません –

関連する問題