2016-04-08 96 views
0

我有三個模型「事件」,「團隊」和「用戶」與各種ActiveRecord關聯,並且無法創建新的Event對象並將其與team_id關聯。也許我錯過了與關係的一些東西。它們的定義如下:Ruby On Rails - 通過關聯的新模型對象

class User < ActiveRecord::Base 
    has_many :teams 
    has_many :events, through: :teams 
end 

class Team < ActiveRecord::Base 
    has_many :events 
    has_many :users 
end 

class Event < ActiveRecord::Base 
    belongs_to :team 
    has_many :users, through: :teams 
end 

class EventsController < ApplicationController 
    def new 
    @event = Event.new 
    end 

    def create 
    @event = current_team.events.build(event_params) 
    if @event.save 
     flash[:success] = "Event created!" 
     redirect_to @event 
    else 
     render 'new' 
    end 
    end 

class TeamsController < ApplicationController 
    def new 
    @team = Team.new 
    end 

    def create 
    @team = current_user.teams.build(team_params) 
    if @team.save 
     flash[:success] = "Team created!" 
     redirect_to @team 
    else 
     render 'new' 
    end 
    end 

錯誤在事件觸發控制器,當我提交了創建新活動形式,如current_team.events無法識別。我對RoR比較陌生,所以任何幫助都將不勝感激!

回答

0

我終於明白髮生了什麼事。我試圖用定義current_user的相同方式定義current_team,但是,current_user僅僅是當前登錄的會話中的一個用戶。

因此,我走了一條不同的路線,並將link_to中的team_id參數傳遞給新事件的表單。這讓我可以在窗體的hidden_​​field中調用team_id並將其保存到數據庫中。

的方法,這種反應說明相當不錯:Pass Parameters in Link_to

感謝所有的幫助!

活動控制器

class EventsController < ApplicationController 
def new 
    @event = Event.new(:team_id => params[:team_id]) 
end 

def create 
    @event = Event.new(event_params) 
    if @event.save 
     flash[:success] = "Event created!" 
     redirect_to @event 
    else 
     render 'new' 
    end 
end 

private 

    def event_params 
     params.require(:event).permit(:date, :name, :location, :venue, :team_id) 
    end 
end 

鏈接:在形式上

<%= f.hidden_field :team_id %> 
0

從您的代碼看來,current_team未在您的EventsController中定義。如果你從表單中得到團隊ID,你可以這樣做:

current_team = Team.find(params[:team_id]) 

然後它應該工作。

+0

CURRENT_USER是從來沒有在球隊控制器定義

<%= link_to "Create new event", newevent_path(:team_id => @team.id), class: "btn btn-md" %> 

隱藏字段,這是因爲CURRENT_USER在軌道隱含定義? – ncarroll

+0

它通常會帶來這種功能的設計寶石,但它會是current_user,而不是current_team! – born4new

0

用戶和團隊之間是否有連接表?從這個例子中可以看出,這兩個模型之間存在着多對多的關係,但是我沒有看到定義的關係。檢查Rails guides

+0

我有一個team_user連接表。目前,我沒有創建團隊和用戶的問題。 – ncarroll

0

在團隊模式,因爲它的連接表,你應該做到以下幾點

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

在事件模型:

class Event < ActiveRecord::Base 
    has_many :teams 
    has_many :users, through: :teams 
end 

不過我不知道什麼你真的想要,如果Team table是一個連接表,並且希望它表現得像一個,那麼這應該沒問題,但是我建議你再次檢查你的關係,並且檢查rails guide以完全理解你在這裏要做的事情。

+0

我希望team_id在創建事件時傳遞,以便團隊對事件進行索引,並將這些事件顯示在各個團隊頁面上。我會繼續在導軌指南中進行挖掘,謝謝。 – ncarroll

+0

這很好,那麼你的模特協會應該工作。 檢查Event表中是否有Team外鍵,它可以通過移植創建 – amrdruid

+0

外鍵位於事件表中。問題似乎是事件控制器中的NoMethodErrors,不能識別current_team.events.build中的team_id或事件。 – ncarroll