2011-10-18 2 views
1

こんにちは私はMongoidにリレーションシップを持っており、このリレーションにcurrent_userを追加して取引を作成するユーザーを取得することはできません。 3モデルとの関係。current_userを追加するMongoid関係を作成する

私は三つのモデルのuser.rb、house.rbを持っていると

user.rb関係(モデルを考案)

# Relationships 
has_many :houses, dependent: :destroy 
has_many :deals, dependent: :destroy 
key :title 

house.rb

# Relationships 
belongs_to :user 
embeds_many :deals 
をdeal.rb

deal.rb

私の作成方法の私のhouses_controller.rbで私の routes.rbを

resources :houses do 
    resources :deals 
end 

# Relationships 
embedded_in :house, :inverse_of => :deals 
belongs_to :user 

私はこの辺の各家のためにCURRENT_USERを取得:私のdeals_controllerで

def create 
    #@house = House.new(params[:house]) 
    @house = current_user.houses.new(params[:house]) 
    respond_to do |format| 
     if @house.save 
     format.html { redirect_to @house, notice: 'House was successfully created.' } 
     format.json { render json: @house, status: :created, location: @house } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @house.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

.rb私はこの方法を作成しました:

def create 
     @house = House.find_by_slug(params[:house_id]) 
     @user = User.find(:user_id) 
     @deal = @house.deals.create!(params[:deal]) 
     redirect_to @house, :notice => "Comment created!" 
    end 

この最後のメソッドを追加すると、取引を作成したcurrent_userが作成されます。

@deal.user=current_user 
@deal.save 

そして、私はまた、あなたが作成し使用しないことをお勧め:

答えて

0

あなたは、単に作成アクションに次の2行を追加することができます!代わりに、scaffolded createアクションのように.newと.saveを使用する必要があります。 ;)

+0

ありがとうございました!私は変更を新しく作成して保存します:D。しかし、house.rbと "embedded_in:houseの" embeds_many:deals "の場合、deal.rbに" inverse_of =>:deal "というエラーが表示されます。"(n)取引文書の参照は、取引が組み込まれているため許可されています。しかし、has_manyとbelongs_toはうまく動作します。 embeds_manyやhas_manyと参照を使って作業するのが最善でしょうか?ありがとうございます – hyperrjas

+0

@hyperrjasが見ているエラーを避けるために、誰かがこの問題を遭遇した場合、つまり、「取引が埋め込まれているため、(n)取引文書をリレーショナル・アソシエーションを介してユーザー文書から参照することはできません。彼の最初の質問で定義したuser.rbからこの行を削除してください#has_many:deal、dependent::destroy – brg

関連する問題