2011-07-16 81 views
0

我對軌道非常陌生,在獲取哲學和找到「適當」方法來創建一個對象作爲另一個對象的依賴關係時遇到了一些麻煩。使用belongs_to關聯創建對象的正確方法是什麼?

我有一個Backlog模型:

class Backlog < ActiveRecord::Base 
    has_many :user_stories 
end 

UserStory型號:

class UserStory < ActiveRecord::Base 
    belongs_to :backlog 
end 

Backlog控制器的表演動作,我想顯示一個鏈接,創建一個UserStory屬於到目前的Backlog。我希望它重定向到UserStory創建表單。

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

如果我把new_user_story_path,它創建一個新UserStory但不會將其添加到Backlog

我該怎麼辦?

謝謝!

回答

3

您需要嵌套路線。

app/config/rotues.rb

CodeGlot::Application.routes.draw do 

    resources :backlogs do 
    resources :user_stories 
    end 

end 

然後,你需要有一個嵌套鏈接:

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

由於不涉及嵌套表單,因此不需要「accep_nested_attributes_for:user_stories」。 – emrass

+0

絕對正確。你不需要那個。我基本上從這樣做的項目中獲取這些代碼,這就是爲什麼它在那裏。感謝'blackbird07' – s84

相關問題