0

ユーザーのフォロー/フォロー解除ボタンと同様に、ユーザーが作成したイベントに参加/参加解除ボタンを追加しようとしています。

@rsvps を event#show のように定義する方法がわかりません

イベントの NameError#show #<#:0x007f9dfaf9d978> の未定義のローカル変数またはメソッド「イベント」

show.html.erb

<%= link_to "Join Event", rsvps_path(:event_id => event), :method => :post %>

events_controller.rb

def show
  @event = Event.find(params[:id])
  @user = current_user
  #@rsvp = ???? something here ????
end

rsvps_controller.rb

class RsvpsController < ApplicationController
  before_filter :signed_in_user

  def create
    @rsvp = current_user.rsvps.build(:event_id => params[:event_id])
    if @rsvp.save
      flash[:notice] = "Joined event."
      redirect_to root_url
    else
      flash[:error] = "Unable to join event."
      redirect_to root_url
    end
  end

  def destroy
    @rsvp = current_user.rsvps.find(params[:id])
    @rsvp.destroy
    flash[:notice] = "Unjoin Event."
    redirect_to current_user
  end
end

モデルはこちら

rsvp.rb

class Rsvp < ActiveRecord::Base
  attr_accessible :event_id, :user_id

  belongs_to :user
  belongs_to :event

end

user.rb

has_many :rsvps
has_many :events, through: :rsvps, dependent: :destroy

event.rb

belongs_to :user

has_many :rsvps
has_many :users, through: :rsvps, dependent: :destroy
4

2 に答える 2

0

このコードはもっとレールっぽいと思います。

# user.rb
has_many :users_events
has_many :events, through: :users_events

# event.rb
has_many :users_events
has_many :users, through: :users_events

# users_event.rb
belongs_to :user
belongs_to :event

それ以外はすべて ActiveRecord が行います。8)

たとえばuser.eventsevent.usersメソッド。

ユーザー アクションへの参加および参加解除は、 によって処理される場合がありますevents controller。更新方法は次のようになります

# events_controller.rb
def update
  respond_to do |format|
    @event = Event.find(params[:id])
    @event.users << current_user if params[:action] == 'join'
    @event.users.delete(current_user) if params[:action] == 'unjoin' 
    if @event.update_attributes(params[:event])
      format.html { redirect_to @event, notice: 'Event was successfully updated.' }
      format.json { head :no_content }
    else
      format.html { render action: "edit" }
      format.json { render json: @event.errors, status: :unprocessable_entity }
    end
  end
end

少し面倒ですが、アイデアが明確であることを願っています。

于 2012-09-13T00:47:39.087 に答える
0

未定義のローカル変数またはメソッド エラーは、:event_id => eventrsvp_path を介してコントローラーに渡そうとしたことが原因のようです。代わりに、そのようにイベントオブジェクトを渡すだけです

<%= link_to "Join Event", rsvps_path(event), :method => :post %>

コントローラーの行@event = Event.find(params[:id])は、渡されたイベントを把握します。

于 2012-09-13T00:58:16.307 に答える