我对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
。
我该怎么办?
谢谢!
答案 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