使用belongs_to关联创建对象的正确方法是什么?

时间:2011-07-16 19:24:32

标签: ruby-on-rails ruby-on-rails-3 has-many belongs-to

我对rails非常陌生,而且我在获取哲学并找到“正确”的方法来创建一个对象作为另一个对象的依赖时遇到了一些麻烦。

我有Backlog型号:

class Backlog < ActiveRecord::Base
  has_many :user_stories
end

UserStory模型:

class UserStory < ActiveRecord::Base
  belongs_to :backlog
end

Backlog控制器的show动作中,我想显示一个链接,以创建属于当前UserStory的{​​{1}}。我希望它重定向到Backlog创建表单。

UserStory

如果我添加<%= link_to 'New User story', "???" %> ,则会创建新的new_user_story_path,但不会将其添加到UserStory

我该怎么办?

谢谢!

1 个答案:

答案 0 :(得分: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) %>

*确保您有可变的积压,否则路线将失败。

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