class EventTeam < ActiveRecord::Base
belongs_to :event
belongs_to :team
end
class Event < ActiveRecord::Base
has_many :event_teams
has_many :teams, through: :event_teams
end
class Team < ActiveRecord::Base
has_many :event_teams
has_many :events, through: :event_teams
end
我正在尝试在创建新事件时将:event_id和:team_id添加到EventTeam联接表中,尽管已经详尽地搜索了类似的问题,但似乎无法弄清楚如何:{{3} (我已尝试过所有这些建议)
似乎以下内容应该可行,但是会传递NoMethodError:&#34;未定义的方法`events&#39;对于#ActiveRecord :: Relation []&#34;
EventsController
def new
@event = Event.new(:team_id => params[:team_id])
end
def create
@team = Team.where(:id => params[:team_id])
@event = @team.events.create(event_params)
if @event.save
flash[:success] = "Event created!"
redirect_to @event
else
render 'new'
end
end
我在用户,团队和成员资格(联接表)的同一个应用程序中也有类似的情况。当用户创建新团队时,以下代码会自动将:team_id和:user_id添加到Memberships表。
TeamsController
def new
@team = Team.new(:user_id => params[:user_id])
end
def create
@team = current_user.teams.create(team_params)
if @team.save
flash[:success] = "Team created!"
redirect_to @team
else
render 'new'
end
end
有关如何完成此任务的任何建议?
答案 0 :(得分:1)
未定义的方法`事件&#39;对于#ActiveRecord :: Relation []
where
返回 AR关系 而不是 单一实例 ,因此{{1}不会工作。请改用@team.events
find
<强> 更新 强>
找不到具有&#39; id&#39; =
的团队
您在@team = Team.find(params[:team_id])
@event = @team.events.create(event_params)
哈希中获得team_id
,因此event
无法正常工作。您需要使用params[:team_id]
params[:event][:team_id]
答案 1 :(得分:0)
只需指定关系的第一个值,因为您使用值id
的唯一索引进行搜索,因此应该很好:
@team = Team.where(id: params[:team_id]).first
@event = @team.events.create(event_params)
这是因为.where
与find_by
或find(1)
不同,返回Relation
,而不是第一个值。
但是,在现代版本的rails中,我看到建议使用where.first
对,而不是find
。