使用belongs_to和has_many关系的脚手架:“编辑”和“销毁”的link_to路径不起作用

时间:2011-04-10 06:03:38

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

我的项目允许家庭页面有多个故事。模型包括关系 - “家庭有很多故事”和“故事属于家庭”。在routes.rb文件中,我有以下内容:

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,由nifty scaffolding生成的代码不考虑关系,“Show”,“Edit”和“Destroy”的链接不起作用。经过一些研究后,我修改了这些链接的代码如下:

  <% 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,story]”时,“显示”链接正常工作。 “销毁”和“编辑”链接不适用于类似的替换。

“销毁”链接不会产生错误,但就像“显示”链接一样 - 记录不会被删除而是显示(确认对话框永远不显示)。“编辑”链接会生成以下错误:

"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]}"

[@ family,story]构造适用于“Show”链接。为什么它不能用于“编辑”和“销毁”链接?如何修改它们才能正常工作?

1 个答案:

答案 0 :(得分:0)

这是由冲突的javascript配置引起的。

我使用的rails应用程序构建器将我的jquery.js文件放在“public / javascript”文件夹中,但在文件夹中调用jquery(我不得不将其移动到一个级别。)2)config / application.rb文件有两个javascript配置行。我删除了一个,并确保第二个指向上面提到的jquery.js文件。随着那些改变所有工作