2016-07-28 9 views
0

私はレールに2つのモデル、購入品とピースを持っています。購入が作成されるたびに、私はここ3にその購入に関連した作品のステータスを設定したい私のコードは今ある:私の購入コントローラで異なるコントローラで可変パラメータを変更する

piece = Piece.find(params[:piece_id]) 
# This works, as when the purchase is created in my view, it passes the piece_id as a hidden field. 

Purchase.create(
    parameter_1 = blah, 
    parameter_2 = blah, 
    piece_id = piece.id 
) 
#This also works 

piece.status = 3 

最後の行があります私は問題を抱えています。 pieceはインスタンス変数のようで、実際のオブジェクトの状態を変更することはできません。この実際のオブジェクトにアクセスしてステータスを変更するにはどうすればよいですか?

ありがとうございました。

+0

を作成エラーはありますか、どのようなエラーですか? – spickermann

+0

私は "piece.save" – emrahbasman

答えて

1

あなたがpiece.status = 3を行うと、あなたのpieceローカル変数内のオブジェクトが値を取得し、実際にあなたがオブジェクトを保存する必要が変更存続するために:あなたはこれをASSINGする場合は

piece.status = 3 
piece.save! 
0

を、になりますモデルでメソッドを作成した方が良いでしょう。例えば

def default_value 
    @piece.status = 3 #or @piece = piece.status = 3 
    @piece.save! #or piece.save! 
end 

その後、あなたはbefore_action

とコントローラでそれを呼び出すことができ、私はあなたがデータベースと対話していて、維持するのに役立ちますので、これは良い方法だと思いますあなたのコントローラーは重くしないでください。あなたに

0

あなたは*ステータス*を変更することはできませんあなたはどういう意味ですか?方法

def create 
    @purchase = Purchase.new(purchase_params) 

    respond_to do |format| 
    if @purchase.save 
     @piece = Piece.where(purchase: @purchase) 
     @piece.update_attributes(status: 3) 
関連する問題