2016-04-08 63 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