2011-07-26 27 views
2

私は多くのイベントをリストしているサイトで作業しています。ログインしているユーザーがお気に入り/監視イベントの個人的なリストにイベントを追加できるようにします。好みのオブジェクトの配列にオブジェクトを追加する

私は、ユーザーがログインしている場合、私がしたい

event.rb

has_and_belongs_to_many :profiles 

profile.rb

has_and_belongs_to_many :events 

を持っていますそれぞれのボタンそのイベントをcurrent_userのプロファイルに追加するイベントビューです。基本的には、この機能:

current_user.profile.events < <イベント

それはコンソールにそれを行うために動作しますが、私はこれを行うフォームを作成する方法を見つけ出すことはできません。この本ウェブサイト上のさまざまな答えを見てから、これは私が持っているものです。

routes.rbを

map.resources :events, :member => { :create_calendar => :post } 

_event.html.erb

<%= form_for(current_user.profile.events(event)) do |f| %> 
    <%= f.submit "Add to Calendar" %> 
<% end %> 

events_controller.rb

def create_calendar 
    @event = Event.find(params[:event_id]) 
    current_user.profile.events << @event 
end 

ガイダンス、アドバイス、ヒントがあれば幸いです!

答えて

3

私はhas_and_belongs_to_manyのファンではないので、私の助言はそれを捨てて新しいモデルを作ることです。多分これ

class SavedEvent < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :event 
end 

のようなもの次に、あなたがこのような何か行うことができます。

イベントを見る:

form_for SavedEvent.new, :url => "/events/save_event" do |f| 
    f.hidden_field :event_id, :value => @event.id 
    f.submit "Save Event" 
end 

を次にそれを保存する:

def save_event 
    @saved_event = SavedEvent.new(params[:saved_event] 
    @saved_event.user = current_user 
    @saved_event.save 
end 

当然あなたがこれをトリミングすることができますちょっと落としてもう少しRESTfulにしましょう。しかし、それは私がdoiについてどうやっていくのかの主要なビルディングブロックになりますそれを。

+0

合意。別のモデルを作成するのは簡単で、プロファイルの意味を過負荷にするよりもはるかに理解しやすくなります。 –

関連する問題