1

手头的问题涉及关键主题:

  1. 嵌套资源
  2. 多态关联
  3. 形式

我们假设我们有照片和文章,两者都有评论。这创建了我们的多态关联。

#Photo Model -> photo.rb
    class Photo < ActiveRecord::Base
      has_many :comments, :as => :commentable
      accepts_nested_attributes_for :comments
    end

#Article Model -> article.rb
    class Article < ActiveRecord::Base
      has_many :comments, :as => :commentable
      accepts_nested_attributes_for :comments
    end

#Comment Model -> comment.rb
    class comment < ActiveRecord::Base
      belongs_to :commentable, :polymorphic => true
    end

我们添加和查看评论的视图在照片和文章之间共享。

#Index View 
  <%= form_for [@comment] do |f| %>
     <%= render 'form', :f => f %>
     # more code...
  <% end %>

而且,我们的资源照片和文章嵌套在其他资源中,如下所示:

# Routes.rb    
namespace :galleries do
   resources :photos do
     resources :comments
   end
end

namespace :blogs do
   resources :articles do
     resources :comments
   end
end

现在您可以在上面的表格中看到,我们有我们的多态资源,但我们需要我们的父资源和祖父资源,具体取决于我们的请求路径。如果硬编码(永远不会这样做),我们将在 form_for 中有这两个之一:

<%= form_for [:galleries, :photos, @commetns] do |f| %>

或者

<%= form_for [:blogs, :articles, @commetns] do |f| %>

假设我们可以在许多文章和 Stackoverflow 答案中找到的 CommentsController 中找到父级,如下所示:

def find_medical_loggable
  params.each do |name, value|
    if name =~ /(.+)_id$/
      return $1.classify.constantize.find(value)
    end
  end
end

我们如何才能找到祖父母并将所有这些放入 form_for 助手中?

非常感谢!

4

0 回答 0