我的项目允许家庭页面有多个故事。模型包括关系 - “家庭有许多故事”和“故事属于家庭”。在routes.rb中文件我有以下几点:脚手架与belongs_to和has_many的关系:link_to“编辑”和“销毁”不工作的路径
resources :families do
resources :stories
end
从而为故事控制器以下路线:
family_stories GET /families/:family_id/stories(.:format) {:action=>"index", :controller=>"stories"}
POST /families/:family_id/stories(.:format) {:action=>"create", :controller=>"stories"}
new_family_story GET /families/:family_id/stories/new(.:format) {:action=>"new", :controller=>"stories"}
edit_family_story GET /families/:family_id/stories/:id/edit(.:format) {:action=>"edit", :controller=>"stories"}
family_story GET /families/:family_id/stories/:id(.:format) {:action=>"show", :controller=>"stories"}
PUT /families/:family_id/stories/:id(.:format) {:action=>"update", :controller=>"stories"}
DELETE /families/:family_id/stories/:id(.:format) {:action=>"destroy", :controller=>"stories"}
下面是相关的控制器方法:
def edit
@story = @family.stories.find(params[:id])
end
def destroy
@story = @family.stories.find(params[:id])
@story.destroy
redirect_to family_stories_url, :notice => "Successfully destroyed story."
end
对于index.html.erb由漂亮脚手架生成的代码没有考虑到关系,而“显示”,“编辑”和“销毁”的链接不起作用。经过一番研究,我修改了代码,这些链接如下:以取代原来的“故事”变量时
<% for story in @stories %>
<tr>
<td><%= story.title %></td>
<td><%= story.body %></td>
<td><%= link_to "Show", [@family, story] %></td>
<td><%= link_to "Edit", edit_family_story_path([@family, story]) %></td>
<td><%= link_to "Destroy", [@family,story], :confirm => 'Are you sure?', :method => :delete %> </td>
</tr>
<% end %>
“显示”链接工作正常“[@family,故事]”。 “销毁”和“编辑”链接不适用于类似的替换。
“Destroy”链接没有产生任何错误,但与“Show”链接相同 - 记录未被删除,而是显示(确认对话框从不显示。)“Edit”链接生成以下错误:
"No route matches {:action=>"edit", :controller=>"stories", :family_id=>\#[Story id: 1, title: "story01 for family01", body: "body01 for story01 for family01", created_at: "2011-04-09 22:55:14", updated_at: "2011-04-09 22:55:14", family_id: 1]}"
的[@家庭,故事]构建行之有效的 “显示” 链接。为什么它不适用于“编辑”和“销毁”链接?我如何修改它们以正确工作?