2012-09-13 2 views
0

사용자가 만든 Follow/Unfollow 버튼과 유사하게 사용자가 만든 이벤트에 Join/Unjoin 버튼을 추가하려고합니다. 0x007f9dfaf9d978>Many many 연관이있는 NameError

쇼 :

나는 #은 # < #에 대한 정의되지 않은 지역 변수 또는 메소드`이벤트 '를 보여 #이 이벤트에

나가서 설명하자면 NameError을 보여시로 @rsvps을 정의 할 모르겠어요 .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 

답변

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 

액티브 다른 모든 것을. 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 

다소 지저분하지만 생각은 분명합니다.

+0

내가 생각했던 것보다 훨씬 간단한 hmmm. 그래서 그냥 사용자가 이벤트에 가입하거나 탈퇴 할 수 있도록 rsvps에 대한 메소드를 작성해야합니까? 죄송합니다. 레일스에 기본 질문이 있다면 – pmanning

+0

입니다.'events_controller'에 이미'update' 메소드가 있어야합니다. 그래서 사용자에게 연결/연결 해제 할 데이터를'PUT' 할 수 있습니다. 잠시 후에 내 대답을 업데이트하겠습니다. –

+0

아, 한 번 더. 나는 처음부터 올바른 것을 이해하지 못했다고 생각한다. 이벤트에는 둘 이상의 사용자가있을 수 있습니다. 그렇다면 ** 가입 ** 모델이 필요하며 내 대답은 정말 싫다. –

0

정의되지 않은 로컬 변수 또는 메서드 오류가 :event_id => event을 rsvp_path를 통해 컨트롤러에 전달하려고 시도하는 것으로 보입니다. 대신 당신은 당신이 그것을 전달 무엇 이벤트 파악 돌볼 것입니다 그래서

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

라인 @event = Event.find(params[:id]) 컨트롤러처럼 이벤트 객체를 전달해야한다.