2011-07-16 14 views
0

私はかなり新しいレールです。私は、哲学を得て、他のものの依存としてオブジェクトを作成するための「適切な」方法を見つけるのにいくつかの問題を抱えています。belongs_to関連付けを使用してオブジェクトを作成する適切な方法は何ですか?

私はBacklogモデルがあります:

class Backlog < ActiveRecord::Base 
    has_many :user_stories 
end 

UserStoryモデル:Backlogコントローラーのshowアクションで

class UserStory < ActiveRecord::Base 
    belongs_to :backlog 
end 

、私が所属UserStoryを作成するためのリンクを表示するに現在のBacklogに変更します。私はUserStory作成フォームにリダイレクトします。

<%= link_to 'New User story', "???" %> 

私はnew_user_story_pathを置けば、それは新しいUserStoryが作成されますがBacklogに追加されません。

どうすればよいですか?

ありがとうございます!

答えて

3

ネストされたルートが必要です。

CodeGlot::Application.routes.draw do 

    resources :backlogs do 
    resources :user_stories 
    end 

end 

app/config/rotues.rb

は、その後、あなたは、ネストされたリンクを持っている必要があります:

index.html.erb # or whatever file

<%= link-to "New user story", new_backlog_user_story_path(backlog) %> 

*それ以外のルートが失敗し、あなたはvaribleバックログを持っていることを確認してください。

app/controllers/user_stories_controller.rb

before_filter :get_backlog 

def get_backlog 
    if params[:backlog_id] 
     @backlog = Backlog.find(params[:backlog_id]) 
    end 
end 

def new 
end 

app/views/user_stories/new.html.erb

<div class="form"> 
<%= form_for([@backlog, @user_stories]) do |f| %> 
    <div class="actions"> 
    <%= f.submit "Submit", :disable_with => "Submitting..." %> 
    </div> 
<% end %> 
</div> 

app/models/backlog.rb

accepts_nested_attributes_for :user_stories 
+0

あなたがエラーを取得し、あなたがそれらを修正する方法がわからない場合は私に知らせてください。 – s84

+1

"accepts_nested_attributes_for:user_stories"は、ネストされたフォームが含まれていないため、必須ではありません。 – emrass

+0

絶対に正しい。あなたはそれを必要としません。私は基本的に、このコードをプロジェクトの中から取り入れたので、それがそこにあるのです。おかげで 'blackbird07' – s84

関連する問題