0

作業しているネストされた属性にいくつかのモデルがあります。

私には「チーム」(多くのコンテストがあります)と「コンテスト」(チームに所属)があります。ただし、コンテストで「カテゴリ」を子オブジェクトとして参照することも必要です(コンテストには1つのカテゴリしか含めることができず、カテゴリには5つのコンテストを含めることができます)。

ロジックの仕組みは、最初にチームを作成し、次にコンテストを作成し、その後、カテゴリのリストから(部分的に)選択して関連付けを確立できるようにすることです(コンテストのcategory_idをidに設定します)カテゴリ内の値)。チームの子として新しいコンテストを作成するときにこれがどのように行われるかは私には理にかなっていますが、2番目の関係(既存の親カテゴリに対する既存のコンテスト)の作成に関しては、壁にぶつかっています。

コンテストのショービューを表示するコントローラーは次のとおりです。

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>

私がとても困惑しているのは、カテゴリとコンテストの親子関係を設定するためのコード(コンテストまたはカテゴリコントローラ内?)と、どのビュー(コンテストショービュー、またはカテゴリ_インデックス部分?)を配置する場所です。ここで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)には、次の3ビットのコードが含まれています。

<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 に答える