Rails 3嵌套资源,多态关联和表单

时间:2011-12-14 20:33:30

标签: polymorphic-associations form-for nested-resources

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

  1. 嵌套资源
  2. 多态关联
  3. 表单
  4. 我们假设我们有照片和文章,两者都有评论。这创造了我们的多态协会。

    #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
    

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

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

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

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

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

    我们怎样才能找到祖父母并将所有这些都放入form_for帮助者?

    非常感谢!

0 个答案:

没有答案