2016-04-07 9 views
0

こんにちは私はRuby on Railsを学んでいます。私は現在、ユーザーがイベントを作成し、他の人のイベントにサインアップできるイベントアプリケーションをやっています。もっとエレガントな方法でactiverecordの関連付けをする

基本的なことだが、ユーザーがイベントを作成したときに自動的に参加リストに追加されなかったことがわかった。私が思ったほど簡単なことではありませんでした。

Goingsと呼ばれるテーブルを使用して、ユーザーとイベントの関係が多岐にわたります。それはかなりうまく動作し、私は得ることができます

User.attended_events 
Event.atendees 

ActiveRecordの関係を取得します。

私は

@user.events.build(description: event[:description], date: date_from_date_select_params(event, :date)) 

として、私は、イベントを構築するイベントコントローラでイベントを作成するとdate_from_date_selectは、DateTimeオブジェクトに日付を構築するためのヘルパーです。

私は@ user.saveを実行するとオブジェクトが作成されますが、私はそれがおそらくユーザーによって作成された最後のものであることを知っていることを知っていません。そして日付がユーザー私はここに上記のコードは完全に働いた

Event.where(user_id: @user.id).map{|event| @user.attended_events<<event if event.atendees.none?} 

を何をすべきかわからなかった与えられます。オブジェクトはcreated_atとを使用してますが、私のdefault_scopeがあるので(:DESC順日付)して取得するために把握できます。私はユーザーのイベントを取得し、アテンダントがいない場合(イベントが新規の場合)にのみユーザーが参加したイベントに追加します。

問題は、私がスパゲッティコードを書いたことがあり、そこを解決するよりエレガントな方法があるように感じることです。私は代わりにそれを再フェッチの、あなたに新しく初期化されたレコードを返します

答えて

1

build方法を学ぶために探しています、あなたはこの

# build a new event and store it in a variable 
new_event = @user.events.build(description: event[:description], date: date_from_date_select_params(event, :date)) 

# save the event record directly 
new_event.save 

# append the new event to the "attended_events" collection 
@user.attended_events << new_event 
+0

驚くばかりのようなコレクションにそれを追加してみてください可能性が!ありがとうたくさんのcarlos。これが私がここに投稿したかった理由です。あなたは学ぶべきことが決して分かりません。私は物事を行う簡単な方法が本当に好きです –

+0

私の喜び!お役に立てて嬉しいです :) –

関連する問題