2010-12-27 11 views
0

私は、基本的に要求と宿泊施設の間の結合テーブルとして機能する通知というモデルを持っています。私の要求コントローラでの私の「作成」方法では結合テーブルに新しいレコードを作成する

は、私が持っている:

# find associated accommodations, currently matching: location 
    @accommodations = Accommodation.where('location' => :location) 
    @accommodations.each do |accommodation| 
     @notification = @request.notification.build('accommodation_id' => accommodation.id).save 
    end 

新しい通知レコードを作成していないようです。私はここで間違って何をしていますか?

モデル/ accommodation.rb

class Accommodation < ActiveRecord::Base 
    validates_presence_of :title, :description, :thing, :location, :spaces, :price, :photo 
    attr_accessible :photo_attributes, :title, :description, :thing, :location, :spaces, :price 
    has_one :photo 
    has_many :notifications 
    belongs_to :user 
    accepts_nested_attributes_for :photo, :allow_destroy => true 
end 

モデル/

class Notification < ActiveRecord::Base 
    attr_accessible :accommodation_id, :request_id 
    has_one :request 
end 

モデル/ request.rb notification.rb

class Request < ActiveRecord::Base 
    attr_accessible :firstname, :lastname, :email, :phone, :datestart, :dateend, :adults, :children, :location, :status 
    validates_presence_of :firstname, :lastname, :email, :phone, :datestart, :dateend, :children, :adults, :location 
    has_many :notifications 
end 
+0

実際に何に参加しようとしていますか?あなたはちょうどコードを投稿しました... – sethvargo

+0

申し訳ありません - 多分私の質問は明らかに明白ではありませんでした。それは最初のコードブロックと2番目のコードブロックの間でスムージングされました! 「これは新しい通知レコードを作成していないようですが、私はここで何が間違っていますか?」 –

答えて

0

コントローラに@requestまたは:の位置を定義していません。それはRequestオブジェクトだと仮定すると:ちょうど@AnomalousThoughtよう

@notifications = Array.new 

@accommodations = Accommodation.where('location' => :location) 
Accommodation.find_each(:conditions => { 'location' => :location }) do |a| 
    notification = @request.notifications.create('accommodation_id' => a.id) 
    @notifications << notifications 
end 

は言った:

提供 例について語ったことがたくさんがあります、私は 実装が完全に悪いと思います。しかし、 の質問に関連していない なぜ通知レコードは保存されていません。

+0

より良い実装は何でしょうか?これは動作します(ありがとう!) - 私がしようとしているのは、条件に一致する各宿泊施設レコードの新しい通知レコードを作成することです(現在は:location--実際には@ request.location ... Oopsです)。これを行うより良い方法がある場合は、私に教えてください!私はここで学ぶことに非常にオープンです。 –

+0

実際の問題をもう少し詳しく説明してください。私は通知、宿泊施設、そしてリクエストが何であるか正確にはわかりません...彼らの関係が正確に何であり、どのようにそれらを使用する予定ですか?私はあなたにそのようなより良い応答を与えることができます... – sethvargo

+0

ありがとうセス。私はベッドと朝食のビジネスのためのアプリを構築しています。宿泊施設はまさにその宿泊施設一覧です。宿泊施設は利用可能である場合もありませんし、利用できない場合もありますので、私は利用者からリクエストを受け入れ、各宿泊施設ごとに通知を作成します。通知は宿泊者の所有者(ユーザー)に電子メールを送信し、それを受け入れたり拒否したりすることができます。訪問者は、それぞれの受諾のために電子メールを受け取り、好きなものを選ぶことができます。これが私が「結合」テーブルを持っている理由です。単一のリクエストは複数の通知を持つことができます。 –

1

@request.notification.buildは、リクエストがhas_many通知であるため、@request.notifications.buildである必要があります。

また、@notificationを.saveが返す値に設定すると、trueまたはfalseのみになります。 @notificationに実際のオブジェクトをポイントさせたい場合は、createを使用します。さらに、あなたが望むかもしれないし、望ましくないかもしれないすべての反復で変数@notificationを上書きし続けることになることは既に知っているでしょう。

提供されている例について言及する必要がありますが、実装は完全に貧弱だと思います。しかし、通知レコードが保存されていない理由とは関係ありません。

+0

私は答えを投稿しましたが、私はあなたに投票して、最後のパラグラフを私に完全に同意するので追加しました - 提供された例について言われることはたくさんあります。しかし、通知レコードが保存されていない理由とは関係ありません。 – sethvargo

関連する問題