私のアプリケーションにはUsers
とがありDwellings
ます。がuser
を作成するとdwelling
、は Rails 関連付けを介して のにuser
なります。私の方法では、は列で新しく作成された に正常に割り当てられますが、 はのレコードのに伝播されません。関係なのか、メソッドの設定が間違っているのかわかりませんが、が正常に作成されているため、 を保存しようとすると問題が発生するようです。以下は私のモデルとメソッドの実装です。owner
dwelling
create
user_id
dwelling
owner_id
dwelling_id
dwelling_id
user
user
dwelling
住居モデル
# dwelling.rb
class Dwelling < ActiveRecord::Base
attr_accessible :street_address, :city, :state, :zip, :nickname
belongs_to :owner, :class_name => "User", :foreign_key => "owner_id"
has_many :roomies, :class_name => "User"
validates :street_address, presence: true
validates :city, presence: true
validates :state, presence: true
validates :zip, presence: true
end
--
ユーザーモデル
# user.rb
class User < ActiveRecord::Base
attr_accessible :email, :first_name, :last_name, :password, :password_confirmation, :zip
has_secure_password
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
belongs_to :dwelling
has_many :properties, :class_name => "Dwelling", :foreign_key => "owner_id"
...
--
Dwellings Controller (create メソッド)
# dwellings_controller.rb
def create
@dwelling = current_user.properties.build(params[:dwelling])
if @dwelling.save
current_user.dwelling = @dwelling
if current_user.save
flash[:success] = "Woohoo! Your dwelling has been created. Welcome home!"
else
flash[:notice] = "You have successfully created a dwelling, but something prevented us from adding you as a roomie. Please email support so we can try to correct this for you."
end
redirect_to current_user
else
render 'new'
end
end
--
上記のように、dwelling
は正常に作成されますが、「...しかし、何かがあなたをルーキーとして追加できませんでした...」というフラッシュがelse
条件からトリガーされます。
2012 年 8 月 3 日午後 9 時 11 分更新
トランザクションを強制するcreate
ために使用するアクションを更新しました。user.save!
以下のエラーが出力されました。どういうわけかパスワードが必要なようです。
ActiveRecord::RecordInvalid in DwellingsController#create
Validation failed: Password can't be blank, Password is too short (minimum is 6 characters), Password confirmation can't be blank