私はむしろ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 %>
Railsコンソールでユーザーを作成しようとしましたか? – Soliah
Subscriptionクラス内の 'new'メソッドと 'create'メソッドは意図的ですか? – moritz
彼らは意図的ではありません、私は "私は何かを試してみましょう"キツネには必死になったときに追加しました。私はそれらを削除するために投稿を編集しました。 –