0

我正在使用的嵌套属性中有几个模型。

我有“团队”(有很多比赛)和“比赛”(属于团队)。但我也希望比赛将“类别”引用为子对象(比赛只能有一个类别,一个类别可以有可能的比赛)。

逻辑的工作方式是首先创建一个团队,然后是比赛,然后我希望能够从类别列表中进行选择(部分)并建立关联(将比赛中的 category_id 设置为 id类别中的价值)。对我来说,在作为团队的子项创建新比赛时如何做到这一点很有意义,但是在创建第二个关系(现有比赛到现有父类别)时,我却碰壁了。

为我提供比赛显示视图的控制器是:

def show
@team = Team.find(params[:team_id])
@contest = Contest.find(params[:id])
@categories = Category.all

respond_to do |format|
  format.html # show.html.erb
  format.json { render json: [@contest] }
end

结尾

在显示视图中,我有以下代码:

<p><b>Name:</b><%= @contest.name %></p>
<%= link_to 'Edit', edit_team_contest_path(@team, @contest) %> |
<%= link_to 'Back', team_contests_path %>
<br />
<%= render 'categories/index'%>

我的部分 _index 类别包含以下代码:

<table>
<% @categories.each do |category| %>
<tr>
<td><%= category.level1 %></td>
<td><%= category.level2 %></td>
<td><%= category.level3 %></td>
<td><%= category.level4 %></td>    
<td><%= link_to 'Show', category %></td>
<td><%= link_to 'Edit', edit_category_path(category) %></td>
<td><%= link_to 'Destroy', category, confirm: 'Are you sure?', method: :delete %></td>
<%end%>
</table>

我很困惑的地方是在哪里放置代码(在竞赛或类别控制器中?)以设置类别-竞赛父子关系,以及哪个视图(竞赛显示视图,或类别 _index 部分?)。我很确定我在这里不了解 Rails 的一些基本知识,所以如果有人能指出我可能会消除我的困惑的文档,我将非常感激。

4

1 回答 1

1

好的,这就是我最终解决问题的方法(以防以后有人发现它并使用我尝试过的相同搜索词):

楷模:

team.rb
 has_many :contests, :dependent => :destroy

category.rb
 has_many :contests

contest.rb
 belongs_to :team, :foreign_key => "team_id"
 belongs_to  :category, :class_name => 'Category', :foreign_key =>"category_id"
 accepts_nested_attributes_for :category

控制器:

contests_controller
def update
@contest = Contest.find(params[:id])
@team = @contest.team
if !params[:category_id].nil?
  @category = Category.find(params[:category_id]) 
  @contest.update_attributes(:category_id => @category.id)
end
respond_to do |format|
  if @contest.update_attributes(params[:contest])
   blah
  else
    blah
  end
end
end

类别视图 (_index) 是比赛/节目视图的一部分,包括这三位代码:

<table>
<% @categories.each do |category| %>
<tr>
<td><%= form_for [category, @contest] do |f| %>
    <% f.submit "Select" %>
    <% end %></td>
</tr>
<%end%>
</table>

这就是将属于另一个父级的记录与不同模型中的另一个父级关联起来所需要的(在创建第一个关系之后)。

于 2012-07-12T19:13:16.520 回答