2012-07-04 61 views
0

我有幾個與我一起工作的嵌套屬性模型。將預先存在的記錄與預先存在的父項關聯(2個父對象)

我有「團隊」(有很多constests)和「比賽」(屬於團隊)。但我也希望比賽將「類別」引用爲子對象(比賽只能有一個類別,而一個類別可能有比賽)。

邏輯的工作方式是首先創建一個團隊,然後是比賽,之後我希望能夠從部分列表中選擇(部分)並建立關聯(將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 

在Show View我有這樣的代碼:

<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> 

我在哪裏放置代碼(在比賽或類別控制器中?)用於設置類別比賽親子關係以及哪個視圖(比賽節目視圖或類別_索引部分? )。我非常肯定,在這裏我不瞭解Rails的基本知識,所以如果任何人都可以指出我可以清除我的錯誤的文檔,我會非常感激。

+0

好的,如果有人發現這個問題,這是我最終如何解決它。 –

回答

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> 

這就是將屬於另一個父項的記錄與另一個父項的記錄(在第一個關係創建之後)關聯的方式。

相關問題